سؤال

يجب أن يكون هناك شيء طالبة في 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 (++) ، سيكون:

خارج = (في & ~ قناع) | نيوبت

إذا كانت المبتدئين تحتوي على أجزاء خارج ما يفترض أن يحل محله ، وهم بالقناع أيضًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top