在Python中以十六进制打印负值
我有以下这段C++代码:
for (int x = -4; x < 5; ++x)
printf("hex x %d 0x%08X\n", x, x);
它的输出结果是
hex x -4 0xFFFFFFFC
hex x -3 0xFFFFFFFD
hex x -2 0xFFFFFFFE
hex x -1 0xFFFFFFFF
hex x 0 0x00000000
hex x 1 0x00000001
hex x 2 0x00000002
hex x 3 0x00000003
hex x 4 0x00000004
如果我在Python中尝试同样的事情:
for x in range(-4,5):
print "hex x", x, hex(x)
我得到的是下面这个
hex x -4 -0x4
hex x -3 -0x3
hex x -2 -0x2
hex x -1 -0x1
hex x 0 0x0
hex x 1 0x1
hex x 2 0x2
hex x 3 0x3
hex x 4 0x4
或者这个:
for x in range(-4,5):
print "hex x %d 0x%08X" % (x,x)
这给出的结果是:
hex x -4 0x-0000004
hex x -3 0x-0000003
hex x -2 0x-0000002
hex x -1 0x-0000001
hex x 0 0x00000000
hex x 1 0x00000001
hex x 2 0x00000002
hex x 3 0x00000003
hex x 4 0x00000004
这不是我预期的结果。我是不是漏掉了什么格式化的技巧,能把-4显示成0xFFFFFFFC,而不是-0x04?
1 个回答
20
你需要明确把这个整数限制在32位以内:
for x in range(-4,5):
print "hex x %d 0x%08X" % (x, x & 0xffffffff)