ماذا تعني عملية "| =" في C ++؟
-
27-09-2019 - |
سؤال
لدي الرمز التالي ولا أستطيع أن أفهم ماذا يعني ذلك:
var1 |= var2>0 ? 1 : 2;
يمكن لأي شخص الرجاء مساعدتي!
المحلول
if (var2 > 0)
var1 = var1 | 1;
else
var1 = var1 | 2;
انها قليلا أو.
نصائح أخرى
كل ال a op= b
المشغلون اختصار ل a = a op b
.
ومع ذلك ، نظرًا لأن C ++ يسمح op
و op=
لتتجاوزها بشكل منفصل ، تعتمد على كل تطبيق لأنواع مخصصة لتكون متسقة.
cond ? x : y
عائدات x
إذا كان كونه صحيحًا و y
خلاف ذلك. اقرأ عامل ثلاثي
a |= b
هو اختصار ل a = a | b
الذي يعين a | b
إلى a
a | b
هو bitwise أو من a
و b
. (على سبيل المثال 2 | 3 = 3 و 1 | 2 = 3)
كما قال آخرون إنه قصير ل v1 = v1 | v2;
استخدام آخر قد تصادفه هو مع المنطق.
معطى:
bool b = /*some value*/
بدلا من القول:
if(a)
b = true;
قد ترى:
b |= a;
يمكن تمثيل الأعداد الصحيحة بالثنائي ، بحيث يكون كل رقم (بت ، مفتاح) 1 (تشغيل) أو 0 (إيقاف):
00000000 == 0
00000001 == 1
00000010 == 2
00000011 == 3
00000100 == 4
00001000 == 8
00010000 == 16
Bitwise أو يجمع بين رقمين من خلال "دمج" مجموعتي البتات:
First number: 00110000
Second number: 00000010
Result: 00110010
إذا كان قليلاً 1 في أي من أرقام الإدخال ، فسيكون ذلك 1 في النتيجة.
قارن مع bitwise و ، الذي يجد "تداخل" مجموعتي البتات:
First number: 00110100
Second number: 10011110
Result: 00010100
إذا كان قليلاً 1 في كلا أرقام الإدخال ، فسيكون ذلك 1 في النتيجة.
إذا كانت الأرقام في المتغيرات A و B ، فيمكنك وضع bitwise أو/وينتج عنها في متغير جديد C:
unsigned int c = a | b; // OR
unsigned int c = a & b; // AND
غالبًا ما يجب وضع النتيجة في أحد المتغيرين ، أي
unsigned int c = a | b; // OR
c = a; // copy
لذلك كاختزال ، يمكنك القيام بذلك في خطوة واحدة:
a |= b; // merge b directly into a
كما ذكر الأشخاص الآخرون قبلي ، فهذا يعني أنك ستنتهي بمهام Bitwise أو.
bitwise أو يمكن توضيحها من خلال أخذ النماذج اليمنى الجانبية اليمنى ووضعها على قمة بعضها البعض.
في كل عمود: 0 + 0 يعطي 0 ، 1 + 0 يعطي 1 ، 0 + 1 يعطي 1 ، 1 + 1 يعطي 1.
في سياق المنطقية: خطأ أو خطأ == خطأ ، صحيح أو خطأ == صحيح ، خطأ أو حقيقي == صحيح ، صحيح أو صحيح == صحيح.
فيما يلي مثال على Bitwise أو ونمط البت الناتج: var1 (11) | = var2 (14) -> var1 (15)
1011 (11) OR 1110 (14) = 1111 (15)
المشغل | = يعني التخصيص بواسطة bitwise أو المشغل