我有一个整数n
,我想在其二进制表示中翻转它的k
位(从最低位)。我该怎么办?
例如,如果我有n=0b01101
和k=2
,则结果为0b01001=9
任何语言都没问题。谢谢。
答案 0 :(得分:20)
要翻转一个或多个位,请使用binary XOR。在您的情况下,相应的XOR掩码是左侧的1
shifted k
位。
在Python中:
In [58]: 0b01101 ^ (1 << 2)
Out[58]: 9
表达式:
n ^ (1 << k)
在C,Java,Python和其他一些语言中有效(假设变量已正确定义)。
答案 1 :(得分:4)
将数字1左移你需要的位数,然后对数字进行异或。
JavaScript的:
var num = 6, k = 2;
num = num ^ (1 << k);
发生了什么:
num = 0b01101 XOR (0b00001 << 2)
num = 0b01101 XOR 0b00100
num = 0b01001
答案 2 :(得分:3)
在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);
答案 3 :(得分:1)
以下是你在C中的表现:
n ^ (1 << k)