سؤال

والغريب إذا قد يكون أي شخص بعض التبصر في كيفية وأود أن تفعل ما يلي لرقم ثنائي:

وتحويل

   01+0 -> 10+1 (+ as in regular expressions, one or more)
    01 -> 10  
    10 -> 01  

وهكذا،

10101000010100011100
01010100101010100010

ووتوضيح أن هذه ليست انعكاس بسيط:

000000100000000000
000001010000000000

وأنا أفكر باستخدام التعابير المنطقية، ولكن أنا أعمل مع الأرقام الثنائية ويريدون البقاء على هذا النحو. ولم تقدم قليلا twiddling الصفحة الخارقة لي أي فكرة سواء. هذا بشكل واضح بعض جوهر لدن الخلوية. لذلك، أي شخص لديه عدد قليل من عمليات بت التي يمكن أن تأخذ الرعاية من ذلك؟ (أي رمز ضروري، وأنا أعرف كيف نفعل ذلك).

هل كانت مفيدة؟

المحلول

ودعونا نقول x هو المتغير الخاص بك. ثم كنت لديك:

unsigned myBitOperation(unsigned x)
{
    return ((x<<1) | (x>>1)) & (~x);
}

نصائح أخرى

وTwidle في C / C ++ هو ~

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