سؤال
يجب أن يكون هناك شيء طالبة في CS في الإجابة ، لكن لا يمكنني أن ألف رأسي حوله ...
لدي مجموعة من البتات ، وأحتاج إلى استبدال بعض البتات بمجموعة مختلفة. في مثال مبسط:
10101010 -مجموعة بت الأثرية
00001111 -إظهار مواقف الاستبدال
00001100 -قيم بت جديدة
10101100 -مجموعة بت مضادة
مثال آخر:
10101010 -مجموعة بت الأثرية
00110011 -ask
11111111 -قيم بت جديدة
10111011 -مجموعة بت ضيقة
من التافهة القيام بذلك عن طريق التكرار عبر البتات.
هل من الممكن القيام بذلك باستخدام المنطق المنطقي (و ، أو ، إلخ)؟
المحلول
result = (original & ~mask) | (newbits & mask)
جزء "& ~ قناع" تأكد من مسح تلك البتات إلى 0 قبل | جزء.
جزء "& Mask" تأكد من استخدام البتات المناسبة فقط في newbits.
نصائح أخرى
(جديد وقناع) أو (قديم وليس قناع)
قم بإخفاء البتات المراد استبدالها من الأصل (عن طريق وينج مع عدم القناع) ، ثم ضع البتات الجديدة في (عبر أو).
10101010 -مجموعة بت الأثرية
00001111 -إظهار مواقف الاستبدال
00001100 -قيم بت جديدة
11110000 -قناع Negated
10100000 -الأثرياء الأصليين ملثمين
10101100 -البتات الجديدة أعادت في
في رمز C (++) ، سيكون:
خارج = (في & ~ قناع) | نيوبت
إذا كانت المبتدئين تحتوي على أجزاء خارج ما يفترض أن يحل محله ، وهم بالقناع أيضًا.