Python 位掩码没有给出预期的输出
Python bitmask doesn't give expected output
我将位掩码放在寄存器读取值上并对该值执行逻辑与操作。
我期望的是:
clear_reg_val: 00000000000000000100100000000000
我的实际输出是:
# reg_value is: 00000000000000000100100000001100
# mask_inverted: 11111111111111111111100000000011
# clear_reg_val: 00000000000000000100100000001000
# reg_value is: 00000000000000000100100000001100
# mask_inverted: 11111111111111111111100000000011
# clear_reg_val: 00000000000000000100100000001000
所以我不知道为什么 clear_reg_val 的第 4 位变成了“1”而不是“0”
函数的Python代码添加在下面的截图中:
Python function for read modify write
错误在于您创建倒置蒙版的方式。
您将其作为字符串操作执行,并使用 int
将字符串转换回整数。您忘记指定 base=2
并且该字符串被视为十进制数。
反转 32 位值的正确方法是:
MASK32 = 2**32-1
invx = ~x & MASK32
我将位掩码放在寄存器读取值上并对该值执行逻辑与操作。
我期望的是:
clear_reg_val: 00000000000000000100100000000000
我的实际输出是:
# reg_value is: 00000000000000000100100000001100
# mask_inverted: 11111111111111111111100000000011
# clear_reg_val: 00000000000000000100100000001000
# reg_value is: 00000000000000000100100000001100
# mask_inverted: 11111111111111111111100000000011
# clear_reg_val: 00000000000000000100100000001000
所以我不知道为什么 clear_reg_val 的第 4 位变成了“1”而不是“0” 函数的Python代码添加在下面的截图中:
Python function for read modify write
错误在于您创建倒置蒙版的方式。
您将其作为字符串操作执行,并使用 int
将字符串转换回整数。您忘记指定 base=2
并且该字符串被视为十进制数。
反转 32 位值的正确方法是:
MASK32 = 2**32-1
invx = ~x & MASK32