我尝试使用~
补数运算符来切换数值的位,但结果为负数。例如,我要切换5 -> 2 (101 -> 010)
如何在 Visual Studio 中更改此数字?
答案 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;