- إنضم
- 30 أبريل 2010
- المشاركات
- 1,227
- مستوى التفاعل
- 130
المعاملات في لغة الـ C الدرس الرابع
المعاملات في لغة أردوينو الـ C
I) المعاملات الحسابية
تجري المعاملات الحسابية (Arithmetic Operators) العمليات الحسابية الأساسية الأربعة (الجمع والطرح والضرب والقسمة) بالإضافة إلى عمليات أخرى مثل حساب باقي القسمة وإسناد قيمٍ إلى متغيراتٍ.
1. المعامل %
يحسب باقي قسمة عددين على بعضهما بعضًا.
مثالٌ على استعمال المعامل %:
int x = 0;
x = 7 % 5; // 2
x = 9 % 5; // 4
x = 5 % 5; // 0
x = 4 % 5; // 4
x = -4 % 5; // -4
x = 4 % -5; // 4
x = 7 % 5; // 2
x = 9 % 5; // 4
x = 5 % 5; // 0
x = 4 % 5; // 4
x = -4 % 5; // -4
x = 4 % -5; // 4
2. المعامل *
يحسب ناتج ضرب عددين ببعضهما بعضًا.
مثالٌ على استعمال المعامل *:
int a = 5, b = 10, c = 0;
c = a * b; // القيمة 50 'c' سيُخزِّن المتغير
3. المعامل +c = a * b; // القيمة 50 'c' سيُخزِّن المتغير
يحسب ناتج جمع عددين مع بعضهما بعضًا.
مثالٌ على استعمال المعامل +:
int a = 5, b = 10, c = 0;
c = a + b; // القيمة 15 'c' سيُخزِّن المتغير
c = a + b; // القيمة 15 'c' سيُخزِّن المتغير
4. المعامل -
يحسب ناتج طرح عددين من أحدهما من الآخر.
مثالٌ على استعمال المعامل -:
int a = 5, b = 10, c = 0;
c = a - b; // -القيمة 5 'c' سيُخزِّن المتغير
c = a - b; // -القيمة 5 'c' سيُخزِّن المتغير
5. المعامل /
يحسب ناتج قسمة عددين أحدهما على الآخر.
مثالٌ على استعمال المعامل /:
int a = 50, b = 10, c = 0;
c = a / b; // القيمة 5 'c' سيُخزِّن المتغير
c = a / b; // القيمة 5 'c' سيُخزِّن المتغير
6. المعامل =
يخبر معامل الإسناد المتحكم بتقييم التعبير أو القيمة الموجودة في الطرف الأيمن للمعامل = أيًّا كانت وتخزينها في المتغير الموجود في الطرف الأيسر لذاك المعامل.
مثالٌ على استعمال المعامل =:
int sensVal; // التصريح عن متغير عدد صحيح
sensVal = analogRead(0); //تخزين قيمة الجهد (الرقمية) المقروءة من الرجل 0
sensVal = analogRead(0); //تخزين قيمة الجهد (الرقمية) المقروءة من الرجل 0
II) معاملات الموازنة
تجري معاملات الموازنة (Comparison Operators) عمليةَ موازنةٍ -كما هو اسمها- بين قيمتين أو متغيِّرين أو متغير وقيمة معينة ثم تعيد قيمة منطقية تمثِّل حالة أحد المعاملين (أكبر أو أصغر أو يساوي ...إلخ) نسبةً للآخر.
1. المعامل !=
يوازن بين قيمتين أو متغيِّرين ويعيد القيمة true إن كانا غيرَ متساويين.
مثالٌ على استعمال المعامل !=:
if (x!=y) // y مع x التحقق من عدم مساواة
{
// افعل شيئًا هنا إن كانت الموازنة محققة
}
{
// افعل شيئًا هنا إن كانت الموازنة محققة
}
2. المعامل <
يوازن بين قيمتين أو متغيِّرين ويعيد القيمة true إن كان المعامل الموجود في الطرف الأيسر أصغر تمامًا من المعامل الموجود في الطرف الأيمن.
مثالٌ على استعمال المعامل <:
if (x<y) // y أصغر تمامًا من x التحقق من كون
{
// افعل شيئًا هنا إن كانت الموازنة محققة
}
{
// افعل شيئًا هنا إن كانت الموازنة محققة
}
3. المعامل <=
يوازن بين قيمتين أو متغيِّرين ويعيد القيمة true إن كان المعامل الموجود في الطرف الأيسر أصغر من المعامل الموجود في الطرف الأيمن أو يساويه.
مثالٌ على استعمال المعامل <=:
if (x<=y) // y أصغر أو يساوي x التحقق من كون
{
// افعل شيئًا هنا إن كانت الموازنة محققة
}
{
// افعل شيئًا هنا إن كانت الموازنة محققة
}
4. المعامل ==
يوازن بين قيمتين أو متغيِّرين ويعيد القيمة true إن كان المعامل الموجود في الطرف الأيسر مساويًا للمعامل الموجود في الطرف الأيمن.
مثالٌ على استعمال المعامل ==:
if (x==y) // y يساوي x التحقق من كون
{
// افعل شيئًا هنا إن كانت الموازنة محققة
}
{
// افعل شيئًا هنا إن كانت الموازنة محققة
}
5. المعامل >
يوازن بين قيمتين أو متغيِّرين ويعيد القيمة true إن كان المعامل الموجود في الطرف الأيسر أكبر تمامًا من المعامل الموجود في الطرف الأيمن.
مثالٌ على استعمال المعامل >:
if (x>y) // y أكبر تمامًا من x التحقق من كون
{
// افعل شيئًا هنا إن كانت الموازنة محققة
}
{
// افعل شيئًا هنا إن كانت الموازنة محققة
}
6. المعامل >=
يوازن بين قيمتين أو متغيِّرين ويعيد القيمة true إن كان المعامل الموجود في الطرف الأيسر أكبر من المعامل الموجود في الطرف الأيمن أو يساويه.
مثالٌ على استعمال المعامل >=:
if (x>=y) // y أكبر أو يساوي x التحقق من كون
{
// افعل شيئًا هنا إن كانت الموازنة محققة
}
{
// افعل شيئًا هنا إن كانت الموازنة محققة
}
III) المعاملات المنطقية
تجري المعاملات المنطقية (Boolean Operators) العمليات المنطقية (العملية AND أو العملية OR أو العملية NOT) على القيم أو التعابير المنطقية ثم تعيد القيمة المنطقية الناتجة.
1. المعامل !
يعكس المنطقي القيمة أو التعبير المنطقي الذي يسبقه عبر تطبيق العملية NOT المنطقية عليه؛
يمكن استعمال المعامل! لعكس التعابير المنطقية الموجودة ضمن التعبير if الشرطي:
// false هي x التحقق من كون قيمة
if (!x) {
// الشيفرة التي ستُنفَّذ إن تحقق الشرط
}
if (!x) {
// الشيفرة التي ستُنفَّذ إن تحقق الشرط
}
2. المعامل &&
يطبق العملية AND المنطقية على قيمتين أو تعبيرين منطقيين ويعيد القيمة المنطقية الناتجة
يمكن استعمال المعامل && لعكس التعابير المنطقية الموجودة ضمن التعبير if الشرطي:
// التحقق من وصل الجهد مع الرجل 2 والرجل 3 كلاهما
if (digitalRead(2) == HIGH && digitalRead(3) == HIGH) {
// ستنفذ الشيفرة هنا عند تحقق الشرط
}
if (digitalRead(2) == HIGH && digitalRead(3) == HIGH) {
// ستنفذ الشيفرة هنا عند تحقق الشرط
}
3. المعامل ||
يطبِّق العملية OR المنطقية على قيمتين أو تعبيرين منطقيين ويعيد القيمة المنطقية الناتجة
يمكن استعمال المعامل || مع التعابير المنطقية الموجودة ضمن التعبير if الشرطي:
if (x > 0 || y > 0) { // هي أكبر من الصفر y أو قيمة x التحقق من كون قيمة
// الشيفرة التي ستُنفَّذ إن تحقق الشرط
}
// الشيفرة التي ستُنفَّذ إن تحقق الشرط
}
IV) معاملات وصول المؤشر
معاملات وصول المؤشر هي (Pointer Access Operators) هي المعاملات التي تُستعمَل مع المؤشرات لتوفير وصول المؤشر إلى عناوين المتغيرات في الذاكرة والإشارة إليها، وإمكانية وصول المتغيرات إلى القيم المحتواة في عناوين الذاكرة التي تشير إليها المؤشرات.
1. المعامل &
يُستعمل لتوفير مرجعيةٍ لعنوان الذاكرة المحجوزة (referencing) لأحد المتغيرات، إذ تعدُّ المرجعية إحدى الميزات المهمة التي تُستعمَل مع المؤشرات (pointers).
2. المعامل *
يُستعمل لتوفير وصولٍ لقيمة مخزَّنة في عنوان محدَّد من الذاكرة (Dereferencing) لأحد المؤشرات، إذ تعدُّ الوصولية للبيانات المخزنة في عناوين الذاكرة إحدى الميزات المهمة التي تُستعمَل مع المؤشرات (pointers).
مثالٌ على استعمال المعامل & و * مع متغير ومؤشر:
int *p; // التصريح عن مؤشر؛ نوعه: عدد صحيح
int i = 5, result = 0;
p = &i; // 'i' عنوان المتغير 'p' سيحتوي الآن المؤشر
result = *p; // القيمة الموجودة في العنوان الذي يشير 'result' سيجلب المتغير
// 'i' ويخزنها. القيمة التي سيخزنها هنا هي 5 التي هي قيمة 'p' إليه
int i = 5, result = 0;
p = &i; // 'i' عنوان المتغير 'p' سيحتوي الآن المؤشر
result = *p; // القيمة الموجودة في العنوان الذي يشير 'result' سيجلب المتغير
// 'i' ويخزنها. القيمة التي سيخزنها هنا هي 5 التي هي قيمة 'p' إليه
V) معاملات الأعداد الثنائية
تجري معاملات الأعداد الثنائية (Bitwise Operators) جميع العمليات المنطقية وعمليات الإزاحة على بتات الأعداد والقيم الثنائية ثم تعيد القيمة الناتجة.
1. المعامل &
يُجرِي في لغة ++C العملية AND على كل بتين متقابلين من بتات العددين المعطيين بشكل مستقل ويعطي القيمة العددية الناتجة.
في المثال التالي:
int a = 92; // 0000000001011100 :القيمة الثنائية هي
int b = 101; // 0000000001100101 :القيمة الثنائية هي
int c = a & b; // القيمة الثنائية الناتجة هي: 0000000001000100، أو 68 بالنظام العشري
ستُجرَى العملية AND على كل بت من بتات العددين a و b الصحيحين ذوي الحجم 16 بت، وستُخزَّن البتات الناتجة (16 بت) في المتغير c التي تساوي 01000100 في النظام الثنائي و 68 في النظام العشري. أحد أشهر استعمالات العملية AND مع الأعداد الثنائية هو اختيار بت محدَّد (أو مجموعة من البتات) من قيمة عددية صحيحة، وتدعى هذه العملية التقنيع (masking).int b = 101; // 0000000001100101 :القيمة الثنائية هي
int c = a & b; // القيمة الثنائية الناتجة هي: 0000000001000100، أو 68 بالنظام العشري
2. المعامل >>
يزيح البتات الواقعة على يساره إلى اليسار عددًا محدَّدًا من الخانات مساويًا للقيمة الموجودة على يمينه.
int a = 5; // 0000000000000101 :القيمة الثنائية هي
int b = a << 3; // القيمة الثنائية هي: 0000000000101000، والقيمة في النظام العشري هي: 40
3. المعامل <<
يزيح البتات الواقعة على يساره إلى اليمين عددًا محدَّدًا من الخانات مساويًا للقيمة الموجودة على يمينه.
int a = 40; // 0000000000101000 :القيمة الثنائية هي
int b = a >> 3; // القيمة الثنائية الناتجة: 0000000000000101، وتساوي 5 في النظام العشري
4. المعامل ^int b = a >> 3; // القيمة الثنائية الناتجة: 0000000000000101، وتساوي 5 في النظام العشري
يُجرِي في لغة ++C العملية XOR على كل بتين متقابلين من بتات العددين المعطيين بشكل مستقل ويعطي القيمة العددية الناتجة.
int x = 12; // 1100 :القيمة الثنائية هي
int y = 10; // 1010 :القيمة الثنائية هي
int z = x ^ y; // القيمة الثنائية الناتجة هي: 0110 وتساوي 6 في النظام العشري
يستعمل المعامل ^ عادةً لقلب (toggle) قيمة بتات معيَّنة (مثل تغييرها من 0 إلى 1 أو من 1 إلى 0) في تعبير عدد صحيح. عند استعمال العملية XOR مع قناع ثنائي، ستتغير قيمة البت المقابلة للقيمة 1 في القناع بينما ستبقى القيم التي تقابل القيمة 0 في القناع دون تغيير. اطلع على المثال التالي الذي يشرح كيفية جعل ضوء الليد الموصول على الرجل 5 يومض خلال فترات زمنية ثابتة:int y = 10; // 1010 :القيمة الثنائية هي
int z = x ^ y; // القيمة الثنائية الناتجة هي: 0110 وتساوي 6 في النظام العشري
// Blink_Pin_5
// المنطقية مع الأعداد الثنائية XOR مثالٌ عن العملية
void setup(){
DDRD = DDRD | B00100000; // OUTPUT تهيئة الرجل 5 على أنها خرج
Serial.begin(9600);
}
void loop(){
PORTD = PORTD ^ B00100000; // تبديل قيمة البت 5 (الرجل 5) فقط دون تغيير البتات البقية
delay(100);
}
// المنطقية مع الأعداد الثنائية XOR مثالٌ عن العملية
void setup(){
DDRD = DDRD | B00100000; // OUTPUT تهيئة الرجل 5 على أنها خرج
Serial.begin(9600);
}
void loop(){
PORTD = PORTD ^ B00100000; // تبديل قيمة البت 5 (الرجل 5) فقط دون تغيير البتات البقية
delay(100);
}
5. المعامل |
يُجرِي في لغة ++C العملية OR على كل بتين متقابلين من بتات العددين المعطيين بشكل مستقل ويعطي القيمة العددية الناتجة.
int a = 92; // 0000000001011100 :القمية الثنائية هي
int b = 101; // 0000000001100101 :القيمة الثنائية هي
int c = a | b; // الناتج في النظام الثنائي هو: 0000000001111101 وفي النظام العشري 125
أحد أشهر استعمالات العملية OR مع الأعداد الثنائية هو تعيين القيمة 1 إلى بت محدَّد (أو مجموعة من البتات) لقيمة عددية صحيحة دون المساس بالبتات المجاورة. تفحَّص المثال التالي الذي يشرح ذلك:int b = 101; // 0000000001100101 :القيمة الثنائية هي
int c = a | b; // الناتج في النظام الثنائي هو: 0000000001111101 وفي النظام العشري 125
DDRD = DDRD | B11111100;
// (xx | 00 == xx) ضبط البتات من 2 إلى 7 إلى القيمة 1 وترك البت 1 والبت 0 دون تغيير
// مع الأرجل من 2 إلى 7 pinMode(pin, OUTPUT) تشبه هذه العملية تمامًا استدعاء
// (xx | 00 == xx) ضبط البتات من 2 إلى 7 إلى القيمة 1 وترك البت 1 والبت 0 دون تغيير
// مع الأرجل من 2 إلى 7 pinMode(pin, OUTPUT) تشبه هذه العملية تمامًا استدعاء
6. المعامل ~
يُجرِي في لغة ++C العملية NOT على كل بت من البتات المعطاة بشكل مستقل -بخلاف المعامل & والمعامل |- ويعطي القيمة العددية الناتجة.
int a = 103; // 0000000001100111 :القيمة الثنائية هي
int b = ~a; // القيمة الثنائية الناتجة هي: 1111111110011000 وتساوي 104- في النظام العشري
int b = ~a; // القيمة الثنائية الناتجة هي: 1111111110011000 وتساوي 104- في النظام العشري