Avatar ·

كيفية تعيين وإعادة تعيين وتبديل بت فردي في 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، وأنا بحاجة