بت عبث لتنفيذ هذا التحويل
-
03-07-2019 - |
سؤال
والغريب إذا قد يكون أي شخص بعض التبصر في كيفية وأود أن تفعل ما يلي لرقم ثنائي:
وتحويل
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 ++ هو ~
لا تنتمي إلى StackOverflow