基本位翻转算法

san*_*292 2 python algorithm bit flip

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

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

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

约束

1≤T≤100

输出格式

使用请求的结果从列表中为每个元素输出一行.

样本输入

3 2147483647 1 0

样本输出

2147483648 4294967294 4294967295

说明

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

wvd*_*vdz 8

可以使用^Python中的按位XOR运算符来完成.

例:

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

0b11110000000100000001000000010000
0b11111111111111111111111111111111
0b1111111011111110111111101111
Run Code Online (Sandbox Code Playgroud)


sra*_*mij 5

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

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