C++العوامل التي تستخدم للتعامل مع الـ Bits
- العامل
&(Bitwize AND) - العامل
|(Bitwize OR) - العامل
^(Bitwize XOR) - العامل
~(Bitwize Compliment OR) - العامل
<<(Left Shift) - العامل
>>(Right Shift)
العامل & (Bitwize AND)
العامل & يحسب ناتج جمع الـ bits المشتركة بين قيمتين.
مثال
using namespace std; int main() { int a = 10; // a = 10 = 00000000000000000000000000001010 int b = 75; // b = 75 = 00000000000000000000000001001011 int c = a & b; // شرحنا كيف سيتم الحصول على الناتج تحت نتيجة التشغيل cout << a << " & " << b << " = " << c; return 0; }
سنحصل على النتيجة التالية عند التشغيل.
10 & 75 = 10
هنا قمنا بتعليم الـ bits المشتركة و التي تم جمعها باللون الاصفر.
b = 75; // 75 = 00000000000000000000000001001011
c = a & b; // c = 00000000000000000000000000001010
// c = 10
العامل | (Bitwize OR)
العامل | يحسب ناتج جمع الـ bits المشتركة و الغير مشتركة بين قيمتين.
مثال
using namespace std; int main() { int a = 10; // 10 = 00000000000000000000000000001010 int b = 75; // 75 = 00000000000000000000000001001011 int c = a | b; // شرحنا كيف سيتم الحصول على الناتج تحت نتيجة التشغيل cout << a << " | " << b << " = " << c; return 0; }
سنحصل على النتيجة التالية عند التشغيل.
10 | 75 = 75
هنا قمنا بتعليم الـ bits المشتركة و الغير مشتركة و التي تم جمعها باللون الاصفر.
b = 75; // 75 = 00000000000000000000000001001011
c = a | b; // c = 00000000000000000000000001001011
// c = 75
العامل ^ (Bitwize XOR)
العامل ^ يحسب ناتج جمع الـ bits الغير مشتركة بين قيمتين.
مثال
using namespace std; int main() { int a = 10; // 10 = 00000000000000000000000000001010 int b = 75; // 75 = 00000000000000000000000001001011 int c = a ^ b; // شرحنا كيف سيتم الحصول على الناتج تحت نتيجة التشغيل cout << a << " ^ " << b << " = " << c; return 0; }
سنحصل على النتيجة التالية عند التشغيل.
10 ^ 75 = 65
هنا قمنا بتعليم الـ bits الغير مشتركة و التي تم جمعها باللون الاصفر.
b = 75; // 75 = 00000000000000000000000001001011
c = a ^ b; // c = 00000000000000000000000001000001
// c = 65
العامل ~ (Bitwize Compliment OR)
العامل ~ يقلب الـ bits التي تساوي 0 إلى 1 و يقلب الـ bits التي تساوي 1 إلى 0.
بعدها يتم حساب الناتج باتباع مبدأ single precision floating point number.
مثال
using namespace std; int main() { int a = 10; // 10 = 00000000000000000000000000001010 int c = ~a; // c = 11111111111111111111111111110111 = -11 cout << "~" << a << " = " << c; return 0; }
سنحصل على النتيجة التالية عند التشغيل.
~10 = -11
العامل << (Left Shift)
العامل << يمسح bits من ناحية اليسار ثم يبدل كل bit تم مسحها منهم بصفر و يضعهم من ناحية اليمين.
مثال
using namespace std; int main() { int a = 10; // 10 = 00000000000000000000000000001010 int c = a << 2; // شرحنا كيف سيتم الحصول على الناتج تحت نتيجة التشغيل cout << a << " << 2 = " << c; return 0; }
سنحصل على النتيجة التالية عند التشغيل.
10 << 2 = 40
هنا قمنا بتعليم الـ bits التي تم مسحها باللون الاصفر و تعليم الـ bits التي تم إضافتها باللون الأزرق.
c = a << 2; // c = 00000000000000000000000000101000 = 40
// c = 40
العامل >> (Right Shift)
العامل >> عندها حالتين: قد يكون العدد أكبر من صفر أو أصغر من صفر.
- إذا كان العدد أكبر من صفر, يمسح bits من ناحية اليمين ثم يبدل كل bit منهم بصفر و يضعهم من ناحية اليسار.
- إذا كان العدد أصغر من صفر, يمسح bits من ناحية اليمين ثم يبدل كل bit منهم بواحد ليحافظ على إشارة الناقص و يضعهم من ناحية اليسار.
المثال الأول
الحالة الأولى: إذا كان العدد أكبر من صفر.
using namespace std; int main() { int a = 9; // 9 = 00000000000000000000000000001001 int c = a >> 2; // شرحنا كيف سيتم الحصول على الناتج تحت نتيجة التشغيل cout << a << " >> 2 = " << c; return 0; }
سنحصل على النتيجة التالية عند التشغيل.
هنا قمنا بتعليم الـ bits التي تم مسحها باللون الاصفر و تعليم الـ bits التي تم إضافتها باللون الأزرق.
c = a >> 2; // c = 00000000000000000000000000000010
// c = 2
المثال الثاني
الحالة الثانية: إذا كان العدد أصغر من صفر.
using namespace std; int main() { // Note " >> " converts the number in 32 bits form int a = -9; // -9 = 11111111111111111111111111110111 int c = a >> 2; // شرحنا كيف سيتم الحصول على الناتج تحت نتيجة التشغيل cout << a << " >> 2 = " << c; return 0; }
سنحصل على النتيجة التالية عند التشغيل.
-9 >> 2 = -3
هنا قمنا بتعليم الـ bits التي تم مسحها باللون الاصفر و تعليم الـ bits التي تم إضافتها باللون الأزرق.
c = a >> 2; // c = 11111111111111111111111111111101
// c = -3