我想有十进制数(第 1 位 + 第 2 位(。
unsigned char a = 52;
unsigned char b = ((((a >> 2) & 0x1)*2)+(((a >> 1) & 0x1)*1));
// expected output: 2
我的代码有效,但我认为这种方式非常糟糕。
我认为混乱在于您的措辞...你说你想要 1st bit + 2nd bit,我认为(语义上(将是位索引 0 和 1。但是从你的代码中可以清楚地看出你真的想要位索引 1 和 2,因此为什么 52 (110100
( 会产生 2。
在这种情况下,通过将位向右移动一个位并抓取低 2 位,可以轻松简化您提供的代码:
unsigned char a = 52;
unsigned char b = (a >> 1) & 3;