十六进制逻辑 "and" 和 python 中的结果不是预期的
Result not expected in hex logical "and" with python
接下来是我正在做的程序的一部分,我需要在 2 个十六进制数之间进行 "AND" 运算,在第一部分一切正常,但在第二部分当我使用十六进制数太长结果与我预期的不同:
#this is ok
x = hex(268435456)
transition = int(x, 16) & 0x000000FF
>>>> print transition
>>>> 6
#this does not work
y = hex(268435456)
transition = int(y,16) & 0xFFFFFF00
>>>> print transition
>>>> 268435456
#in this case the result should be 10 00 00 00
你知道这是怎么回事吗?
你的结果是10 00 00 00
,你只是打印了十进制表示而不是十六进制表示。
>>> print '{:x}'.format(268435456)
10000000
结果是0x10000000
十六进制,也就是十进制的268435456
。参见 hex(268435456)
。
您不需要将十进制数转换为字符串并将它们解析回整数。只要做:
x = 268435456
y = x
transition_x = x & 0xFF
transition_y = y & 0xFFFFFF00
print transition_x # 0
print transition_y # 268435456
你的第一个结果是错误的。结果是0
,不是6
.
如果您使用十进制表示法 (1234
)、十六进制表示法 (0x4d2
) 或八进制表示法 (0o2322
或 02322
[py2]) 定义整数,它将始终在内部存储为 int
。我上面使用的数字文字都表示 1234
的相同十进制值。打印数字将始终使用十进制表示法,除非您将其显式转换为某种字符串表示形式。
接下来是我正在做的程序的一部分,我需要在 2 个十六进制数之间进行 "AND" 运算,在第一部分一切正常,但在第二部分当我使用十六进制数太长结果与我预期的不同:
#this is ok
x = hex(268435456)
transition = int(x, 16) & 0x000000FF
>>>> print transition
>>>> 6
#this does not work
y = hex(268435456)
transition = int(y,16) & 0xFFFFFF00
>>>> print transition
>>>> 268435456
#in this case the result should be 10 00 00 00
你知道这是怎么回事吗?
你的结果是10 00 00 00
,你只是打印了十进制表示而不是十六进制表示。
>>> print '{:x}'.format(268435456)
10000000
结果是0x10000000
十六进制,也就是十进制的268435456
。参见 hex(268435456)
。
您不需要将十进制数转换为字符串并将它们解析回整数。只要做:
x = 268435456
y = x
transition_x = x & 0xFF
transition_y = y & 0xFFFFFF00
print transition_x # 0
print transition_y # 268435456
你的第一个结果是错误的。结果是0
,不是6
.
如果您使用十进制表示法 (1234
)、十六进制表示法 (0x4d2
) 或八进制表示法 (0o2322
或 02322
[py2]) 定义整数,它将始终在内部存储为 int
。我上面使用的数字文字都表示 1234
的相同十进制值。打印数字将始终使用十进制表示法,除非您将其显式转换为某种字符串表示形式。