我有一个 integer n
,我想k
在它的二进制表示中翻转它的第 th 位(从最低)。我该怎么做?
例如,如果我有n=0b01101
and k=2
,那么结果是0b01001=9
任何语言都可以。谢谢你。
将数字 1 左移所需的位数,然后对数字进行异或运算。
JavaScript:
var num = 6, k = 2;
num = num ^ (1 << k);
怎么了:
num = 0b01101 XOR (0b00001 << 2)
num = 0b01101 XOR 0b00100
num = 0b01001
在 c 中,您只需执行此操作即可切换它:
n ^= 1 << k;
但还有其他方法可以做到这一点:
n |= ( 1 << k);
这将位 k 移动到 1
现在,如果你想翻转位,你可以用一元做一个 if 语句,看看你需要如何翻转它
number = pow(2,k)
if((number & n) != number)
//this means that it's a 0 at position k
n |= ( 1 << k);
else
//this means that it's a 1 at position k
n &= ( 0 << k);
以下是你在 C 中的做法:
n ^ (1 << k)
(对于谷歌人)这里是你如何在 VB6 中做到这一点而无需移动
'flips a bit to the opposite of its current value
'1 based, left to right
Function FlipBit(ByVal FlipByte As Byte, ByVal bPosition As Byte) As Byte
FlipBit = FlipByte Xor (2 ^ (8 - bPosition))
End Function
'example
MyByte = 255
'mybyte is now "11111111"
MyByte = FlipBit(MyByte,2)
'mybyte is now "10111111"