我想使用十进制数字(第一位+第二位)。
unsigned char a = 52;
unsigned char b = ((((a >> 2) & 0x1)*2)+(((a >> 1) & 0x1)*1));
// expected output: 2
我的代码有效,但是我认为这种方式非常糟糕。
答案 0 :(得分:5)
我认为混乱在于您的措辞...您说您想要1位+ 2位,我认为(语义上)将是位索引0和1。但是从您的代码中可以明显看出,您确实想要位索引1和2,因此为什么52(110100
)会产生2。
在这种情况下,通过向右移一位并抓住低2位可以轻松简化您提供的代码:
unsigned char a = 52;
unsigned char b = (a >> 1) & 3;