基本位翻转算法

时间:2015-01-15 07:05:41

标签: python algorithm bit flip

所以我是编程新手。在python中学习基础课程,所以我知道基础知识,我正在尝试更多的练习,我正在尝试这个问题,我不知道从哪里开始。

您将获得一个32位无符号整数的列表。您需要通过在其二进制表示中翻转位来输出您获得的无符号整数列表(即必须设置未设置位,并且必须取消设置位)。 输入格式

输入的第一行包含列表大小T.T行跟随列表中包含整数的每一行。

约束

1≤T≤100

输出格式

从列表中为每个元素输出一行,并带有请求的结果。

示例输入

3 2147483647 1 0

示例输出

2147483648 4294967294 4294967295

解释

以1为例,因为无符号32位是00000000000000000000000000000001并且正在翻转我们得到的是11111111111111111111111111111110,而这又是4294967294

2 个答案:

答案 0 :(得分:8)

可以使用按位XOR运算符完成,该运算符在Python中为^

示例:

a = 0xF0101010
b = 0xFFFFFFFF
print(bin(a))
print(bin(b))
print(bin(a ^ b))

0b11110000000100000001000000010000
0b11111111111111111111111111111111
0b1111111011111110111111101111

答案 1 :(得分:5)

foreach x in input:
    x_flipped = ~x & 0xffffffff
    print "bits flipped in unsigned 32-bit", bin(x_flipped)

说明: - (~x)翻转所有位 〜(& 0xffffffff)将2的补码转换为unsigned int。