如何切换整数的N位

时间:2018-10-24 09:48:51

标签: c++ visual-studio toggle bit

我尝试使用~补数运算符来切换数值的位,但结果为负数。例如,我要切换5 -> 2 (101 -> 010)

如何在 Visual Studio 中更改此数字?

5 个答案:

答案 0 :(得分:1)

您需要的是XOR运算符^

如果您的原始号码是x,则:

int y = x ^ 0b111;

前3位会被翻转(我想这就是您所说的“翻转”的意思)。

答案 1 :(得分:0)

作为32位值,5不是0b101。是0b0000'0000'0000'0000'0000'0000'0000'0101。

(尽管those leading zeroes are not significant, value-wise,但是您正在执行位操作的事实使二进制表示的“宽度”很重要。)

因此,当您翻转所有位时,将得到0b1111'1111'1111'1111'1111'1111'1111'1010,这实际上是每2的补码编码为负数。

如果您只想翻转三个最低有效位,则可以使用掩码进行操作:

const int y = x ^ 0b111;

这将保留所有其他位。

答案 2 :(得分:0)

我更喜欢这个:

number ^= 1UL << N

答案 3 :(得分:0)

谢谢你,我解决了这个问题。

使用number ^= 1UL << N,谢谢您的回答。

答案 4 :(得分:-2)

您好,您可以这样做。

(〜N)<0吗? (long)pow(2,32)+〜N:〜N;