我有32位数字A=0x0000000A
和B=0X00000005
。
我通过A^B
获得A xor B,它给出0b1111。
我旋转了这个并获得了D=0b111100000
但是我希望这个32位数不仅仅用于打印,而且我需要MSB位,即使在这种情况下有0进行进一步操作。
答案 0 :(得分:2)
大多数高级语言都没有ROR / ROL运营商。有两种方法可以解决这个问题:一种方法是添加一个外部库,如ctypes或https://github.com/scott-griffiths/bitstring,它们支持旋转或bitlice支持整数(这很容易添加)。
要记住的一件事是Python是无限的'精度 - 正数为MSB,负数为1; python存储多个数字,因为它需要保持与默认值的最大幅度差异。这是你在python中看到奇怪的符号的一个原因,如〜(0x3)显示为-0x4,它相当于两个补码表示法,而不是等效的正值,但-0x4 总是 true,即使你和它对5000位数字,它只会屏蔽底部的两位。
或者,您可以自己动手,我们以往的方式,以及硬件的实际运作方式:
def rotate_left(number, rotatebits, numbits=32):
newnumber = (number << rotatebits) & ~((1<<numbits)-1)
newnumber |= (number & ~((1<<rotatebits)-1)) << rotatebits
return newnumber
答案 1 :(得分:1)
要获取整数的二进制数,可以使用bin()。
只是一个简短的例子:
>>> i = 333333
>>> print (i)
333333
>>> print (bin(i))
0b1010001011000010101
>>>
答案 2 :(得分:1)
bin(i)[2:].zfill(32)
我想你做了什么。
我认为你在这里遇到的更大问题是你误解了数字与其表示之间的差异
12 ^ 18 #would xor the values
56 & 11 # and the values
如果你需要实际的32位有符号整数,你可以使用numpy
a =numpy.array(range(100),dtype=np.int32)