【发布时间】:2014-01-28 12:10:48
【问题描述】:
我正在尝试对整数的 16 位二进制表示使用左移运算符
编写的代码如下:
def showbits(x):
return bin(x)[2:].zfill(16)
i=5225
print "Decimal %d is same as binary" % (i)
print showbits(i)
for j in range(0,5,1):
k=i<<j
print "%d right shift % gives" % (i,j)
print showbits(k)
输出:
Decimal 5225 is same as binary
0001010001101001
5225 right shift 0ives
0001010001101001
5225 right shift 1ives
0010100011010010
5225 right shift 2ives
0101000110100100
5225 right shift 3ives
1010001101001000
5225 right shift 4ives
10100011010010000
主要问题是当它移动前导“1”时,它并没有消失,而是增加了一位......
有什么解决办法吗?
【问题讨论】:
-
我很好奇你为什么要用像 python 这样的高级语言来做奇怪的位移?
-
@wim:因为有时您需要对值进行位移。例如,当与向您发送包含标志的字节的其他系统进行互操作时。每个人都试图解析二进制格式?另一个用途是将一个值乘以 2 的指数。
-
@wim 例如,我正在实现 dns 数据包解析器并猜测,我需要使用位进行操作。对我来说这很奇怪,在语言 X 中你不应该做 Y 因为它是语言 X !只是愚蠢...