(第1位+第2位)以十进制数表示

时间:2019-12-30 00:45:48

标签: c++

我想使用十进制数字(第一位+第二位)。

unsigned char a = 52;
unsigned char b = ((((a >> 2) & 0x1)*2)+(((a >> 1) & 0x1)*1));
// expected output: 2

我的代码有效,但是我认为这种方式非常糟糕。

1 个答案:

答案 0 :(得分:5)

我认为混乱在于您的措辞...您说您想要1位+ 2位,我认为(语义上)将是位索引0和1。但是从您的代码中可以明显看出,您确实想要位索引1和2,因此为什么52(110100)会产生2。

在这种情况下,通过向右移一位并抓住低2位可以轻松简化您提供的代码:

unsigned char a = 52;
unsigned char b = (a >> 1) & 3;