删除无符号整数的二进制补码

时间:2018-07-19 15:15:37

标签: c++

我定义了以下uint:

uint32_t a = ~(b - 1) & 0xf; // b is another uint32_t

是否可以:

uint32_t a_bis = b & 0xf;

假设我没有b而是拥有a,我想拥有a_bis,但是我不确定要从a中获得a_bis可以做些什么数学运算。

谢谢您的帮助!

2 个答案:

答案 0 :(得分:1)

解决方案是a_bis = (~a+1)&0xf;

答案 1 :(得分:0)

如果您忘记了&0xf,这很容易理解。

您所拥有的:

a = ~(b-1)
a_bis = b

您想要什么:

~a = (b - 1)
~a + 1 = b = a_bis
so a_bis = ~a + 1

您现在只能采用该解决方案的最低4位,就可以得到结果。

a = ~(b - 1) & 0xf
a_bis = b & 0xf

编辑:没有看到geza评论。