写一个位翻转算法
Writing a bit flip algorithm
我正在尝试为以下问题编写算法。
问题陈述。
您将获得一个 32 位无符号整数列表。您需要输出通过翻转二进制表示中的位获得的无符号整数列表(即必须设置未设置的位,并且必须取消设置设置位)。
代码如下:
def bit_flip(a):
return ~a & 0xffffffff
t = raw_input("")
a = map(int, t.split())
map(lambda x: x ^ 0xffffffff, a)
for i in a:
print bit_flip(int(i))
输入是
3
2147483647
1
0
我得到的输出是
4294967292
而输出应该是
**2147483648
4294967294
4294967295**
我不确定我哪里错了。输出接近至少一行输出,但不相同。
你的输出是正确的。 3
的32位无符号补码确实是4294967292
。您的程序产生的完整输出是:
4294967292
2147483648
4294967294
4294967295
正确对应数字 3、2147483647、1、0。如果将它们写成十六进制,您会更容易看到:
Dec Hex ~Hex ~Dec
3 3 FFFFFFFC 4294967292
2147483647 7FFFFFFF 80000000 2147483648
1 1 FFFFFFFE 4294967294
0 0 FFFFFFFF 4294967295
您似乎将位翻转了两次,但第一次丢弃了结果:map(lambda x: x ^ 0xffffffff, a)
returns 一个包含翻转值的列表,您没有将其分配给任何东西。如果您更改该行以将结果分配回 a
,您将不再需要 bit_flip
(这也翻转位,只是通过不同的方法):
t = raw_input("")
a = map(int, t.split())
a = map(lambda x: x ^ 0xffffffff, a)
for i in a:
print i
或更短:
for i in map(lambda x: int(x) ^ 0xffffffff, raw_input("").split()):
print i
map(lambda x: x ^ 0xffffffff, a)
返回的列表是答案,但您没有使用它。
至少它有翻转位的整数,我不确定为什么预期输出的元素比输入少一个。
我正在尝试为以下问题编写算法。
问题陈述。
您将获得一个 32 位无符号整数列表。您需要输出通过翻转二进制表示中的位获得的无符号整数列表(即必须设置未设置的位,并且必须取消设置设置位)。
代码如下:
def bit_flip(a):
return ~a & 0xffffffff
t = raw_input("")
a = map(int, t.split())
map(lambda x: x ^ 0xffffffff, a)
for i in a:
print bit_flip(int(i))
输入是
3
2147483647
1
0
我得到的输出是 4294967292
而输出应该是
**2147483648
4294967294
4294967295**
我不确定我哪里错了。输出接近至少一行输出,但不相同。
你的输出是正确的。 3
的32位无符号补码确实是4294967292
。您的程序产生的完整输出是:
4294967292
2147483648
4294967294
4294967295
正确对应数字 3、2147483647、1、0。如果将它们写成十六进制,您会更容易看到:
Dec Hex ~Hex ~Dec
3 3 FFFFFFFC 4294967292
2147483647 7FFFFFFF 80000000 2147483648
1 1 FFFFFFFE 4294967294
0 0 FFFFFFFF 4294967295
您似乎将位翻转了两次,但第一次丢弃了结果:map(lambda x: x ^ 0xffffffff, a)
returns 一个包含翻转值的列表,您没有将其分配给任何东西。如果您更改该行以将结果分配回 a
,您将不再需要 bit_flip
(这也翻转位,只是通过不同的方法):
t = raw_input("")
a = map(int, t.split())
a = map(lambda x: x ^ 0xffffffff, a)
for i in a:
print i
或更短:
for i in map(lambda x: int(x) ^ 0xffffffff, raw_input("").split()):
print i
map(lambda x: x ^ 0xffffffff, a)
返回的列表是答案,但您没有使用它。
至少它有翻转位的整数,我不确定为什么预期输出的元素比输入少一个。