الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ما معنى"المعامل And يعمل على البتات"

مغلق
بدأه mohdabdu في 31 يوليو 2007 · 5 رد · 991 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ، وجدت الكود التالي في كتاب علم نفسك فيجوال بيسك 6 في 21 يوم وعلق الكتاب على أحد الأكواد بكتابة "يعمل المعامل And على البتات"

ما معنى الجملة السابقة وإليكم الكود

Private Sub Text1_KeyDown(KeyCode as Integer , Shift as Integer)
	  Dim int_Shift_State  As  Integer
	  int_Shift_State = Shift  And  7			  'المعامل And يعمل على البتات	(Special bitwise And)
	  Select Case int_Shift_State
			  case 1
					 MsgBox("  shift ")
			  case 2
					 MsgBox("  ctrl ")
			  case 3
					 MsgBox("  Alt ")
			  case 4
					 MsgBox("  Shift + Ctrl ")
			  case 5 
					 MsgBox("  Shift + Alt ")
			  case 6
					 MsgBox(" ctrl + alt  ")
			  case 7
					 MsgBox("  shift + ctrl + alt ")
		End select
#2

يعني أنه يقوم بالتأثير على البتات المؤلفة للبايت

http://en.wikipedia.org/wiki/Logical_conjunction

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#3

Xacker مشكور ، وارايتني أقدر أقرأ انجليزي وترجمت الرابط مع جوجل والترجمة غير واضحة .

ســـ(لجميع القراء)ـــــــؤال: ما فائدة المعامل مع الكود السابق ؟؟؟ ، وهل لكم أمثلة مشابهة لاستعمال المعامل لهذه الحالة؟؟؟

أكرر شكري ولا تنسونا.

#4

انظر الصورة في البداية, هذه شفرة البرنامج بالأسمبلي

ما يقوم به المعامل فعليا هو التالي,

عندما تنقر على احد المفاتيح الخاصة مثل shift/ctrl/alt/...

فكل مفتاح منها له قيمة خاصة

وهي كما تظهر في الكود اعلاه بالترتيب نفسه تأخذ القيمة 1 وتزيد بمقدار 1 للمفتاح التالي

اي shift = 1

ctrl = 2

alt = 3

...

عندما يترجم وينفذ الملف التنفيذي فانه ينفذ بالتصور التالي:

المكدس يحمل عنوان يشير به الى مكان في الذاكرة باسم "int_Shift_State" (مجازياُ)

يتم تحميل هذا المكان الذي يكون بطول 4 بايتات (Integer)

بالقيمة الخاصة بالبارامتر "Shift" عندما يتم تفعيل حدث KeyDown

لكن هذا البارامتر يكون عبارة عن عنوان يشير الى القيمة وليست القيمة الفعلية

حيث يأتي دور

Dim int_Shift_State  As  Integer
int_Shift_State = Shift

بالنسبة للمعالج ليس بحاجة الى استخدام عنوان ذاكرة, يكفيه مسجل register, بالتالي يقوم بوضع القيمة في EAX عبر السطر:

mov	 al, byte ptr [eax]

الآن المسجل AL يعمل عمل "int_Shift_State"

لكن طالما ان VB تتعامل مع العناوين بطول 4 بايتات غالبا فانه لاستخدام الـ Select .. Case يجب ان نقوم بحذف بقية القيم من المسجل EAX كي تبقى القيمة الخاصة بـ AL فقط

للتذكير لمبرمجي الاسمبلي :P

EAX يتألف من E-AX حيث AX تقسم الى AH/AL والـ E تعني extended عندما تطورت المعالجات واصبحت قادرة على عنونة 4 بايتات (EAX) بدلا من اثنين فقط (AX)

مــــــــــا كنــــت تريــــــــــد الوصول إليــــــــــــــــــــــه :D

AND تستخدم هنا لكي تقوم بتحويل جميع القيم البقية في المسجل EAX الى اصفار كي لا يحدث اي خطأ في عملية Select .. Case التي ستقوم بالاعتماد على القيمة الموجودة في EAX فان لم تكن بين (1 - 7) سيتم اعتماد القيمة الافتراضية ويتم الخروج من الحلقة لعدم التطابق.

لان القيمة 7 ستكون مساوية لـ 00000111b في النظام الثنائي وستبقي فقط على البتات التي تمثل القيمة العشرية الصحيحة للاعداد بين (1 - 7)

آسف على الاستفاضة في شرح ربما لا طائل منه :)

اتمنى ان تكون الاجابة قد وصلتك بين هذه الاسطر.

السلام عليكم

post-7008-1185881465_thumb.jpg

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#5
LEFT TO RIGHT
VS6 MSDN كتب:
Bitwise Comparison
A bit-by-bit comparison between identically positioned bits in two numeric expressions.


Bitwise Comparisons and Hexadecimal Operations
#6

Xacker الله ينور عليك وتسلم على ذا الشرح المفصل

هذا الموضوع مغلق.

مواضيع مشابهة