如何在任何语言的整数中的特定位置翻转一下

时间:2013-08-15 05:59:02

标签: java python c

我有一个整数n,我想在其二进制表示中翻转它的k位(从最低位)。我该怎么办?

例如,如果我有n=0b01101k=2,则结果为0b01001=9

任何语言都没问题。谢谢。

4 个答案:

答案 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)