كيفية تعيين وإعادة تعيين وتبديل بت فردي في C++؟
مرحبًا! أنا أكتب برنامجًا لمتحكم دقيق بلغة C++ وأعمل مع السجلات. أحتاج إلى التحكم في البتات الفردية: تعيينها إلى 1، وإعادة تعيينها إلى 0، وتبديلها (عكسها). أعلم أن ذلك يتم باستخدام العمليات البتية، لكني أرتبك دائمًا في الصياغة.
على سبيل المثال، لدي متغير `uint8_t flags = 0b00001111;`. أريد:
1. تعيين البت الثالث (بدءًا من الصفر) إلى 1.
2. إعادة تعيين البت الثاني إلى 0.
3. تبديل البت الأول (إذا كان 1 → 0، إذا كان 0 → 1).
حاليًا أفعل هكذا:
```cpp
uint8_t flags = 0b00001111;
// تعيين البت 3
flags = flags | 0b00001000; // يعمل، لكنه غير مريح
// إعادة تعيين البت 2
flags = flags & 0b11111011; // أخطأ باستمرار في القناع
// تبديل البت 1
flags = flags ^ 0b00000010; // يبدو أنه يعمل
```
الأسئلة:
- هل هناك وحدات ماكرو أو دوال شائعة الاستخدام لهذا؟
- كيف يتم ترقيم البتات بشكل صحيح (من الصفر أم من الواحد)؟
- هل يمكن تجنب حساب الأقنعة يدويًا؟
قرأت على Stack Overflow، لكن الأمثلة كانت بلغة C، وأنا بحاجة