XOR操作在Python中没有给出预期的输出

2024-04-27 13:47:34 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我希望“mask\u inv”的值是“mask\u int”的倒数值
相反,输出是:11111111111109836129268
有人能解释一下我为什么以及如何解决这个问题吗

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))

Tags: informatformaskint数值printzero
1条回答
网友
1楼 · 发布于 2024-04-27 13:47:34

您需要使用int,就好像它们的底层存储是二进制的(当然是二进制的):

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)

输出:

11111111111111111111111111111111 4294967295
11111111111111111111110000000011 4294966275
00000000000000000000001111111100 1020

相关问题 更多 >