[英]XOR operation doesn't give expected output in Python
Hi i would expect the value of "mask_inv" to be the inverted value of "mask_int"嗨,我希望“mask_inv”的值是“mask_int”的反转值
Instead the output is: 11111111111111111111109836129268相反,output 是:11111111111111111111109836129268
Can anyone explain why and how I can fix this?谁能解释我为什么以及如何解决这个问题?
msb = 10
lsb = 2
#mask32 [lsb:msb] = [0]
#sli = mask32 [2:10]
#print (mask32)
mylist = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
#create mask for the given field with lsb and msb
if msb != lsb:
for i in range (lsb, msb):
mylist [i] = 0
else:
mylist [msb] = 0
list.reverse(mylist)
mask_str = ''.join([str(elem) for elem in mylist])
mask_int = int(mask_str)
zero_32 = 2**32-1
print("%s"%"{:032b}".format(zero_32))
print (mask_int)
mask_inv = mask_int ^ zero_32
print (mask_inv)
#print("mask_inv: %s"%"{:032b}".format(mask_inv))
You need to work with ints as though their underlying storage is in binary (which it is of course):您需要使用整数,就好像它们的底层存储是二进制的(当然是这样):
zero_32 = 2**32-1
print("%s"%"{:032b}".format(zero_32), zero_32)
msb = 10
lsb = 2
mask_int = zero_32
mask_bit = 2**lsb
for _ in range(lsb, msb):
mask_int -= mask_bit
mask_bit *= 2
print ("%s"%"{:032b}".format(mask_int), mask_int)
mask_inv = mask_int ^ zero_32
print ("%s"%"{:032b}".format(mask_inv), mask_inv)
Output: Output:
11111111111111111111111111111111 4294967295
11111111111111111111110000000011 4294966275
00000000000000000000001111111100 1020
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.