C++ 如何切换整数的N位

C++ 如何切换整数的N位,c++,visual-studio,toggle,bit,C++,Visual Studio,Toggle,Bit,我试图通过使用~补码运算符来切换数值的位,但结果是一个负数。例如,我想要切换5->2(101->010) 如何在Visual Studio中更改此号码 您需要的是异或运算符^ 如果您的原始号码是x,则: int y = x ^ 0b111; 将翻转前3位(我想这就是您所说的“切换”)。作为32位值,5不是0b101。它是0b0000'0000'0000'0000'0000'0000'0000'0000'0101 (尽管如此,执行位操作的事实使得二进制表示的“宽度”非常重要。) 所以,当你翻转所

我试图通过使用
~
补码运算符来切换数值的位,但结果是一个负数。例如,我想要切换
5->2(101->010)


如何在Visual Studio中更改此号码

您需要的是异或运算符
^

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

int y = x ^ 0b111;

将翻转前3位(我想这就是您所说的“切换”)。

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

(尽管如此,执行位操作的事实使得二进制表示的“宽度”非常重要。)

所以,当你翻转所有的位时,你会得到0b1111'1111'1111'1111'1111'1111'1111'1010,这实际上是一个负数/2的补码编码

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

const int y = x ^ 0b111;

这将保留所有其他位。

您好,您可以这样做

(~N)我更喜欢这样:

number ^= 1UL << N

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


使用
number^=1UL“它是”-“number”是否意味着它是一个有符号的数字?是否要忽略前导的
0
(因为
5
位于
0b00000101
)?还是固定尺寸?(所以
2
0b010
)->
1
0b001
)或
5
0b101
)。@Jarod42哈哈,我一直在这么做,让我知道这段代码有什么问题,值得投反对票,这将帮助我提高。