【问题标题】:Printing negative values as hex in python在python中将负值打印为十六进制
【发布时间】:2011-04-19 09:52:36
【问题描述】:

我在 C++ 中有以下代码 sn-p:

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?

【问题讨论】:

    标签: python number-formatting


    【解决方案1】:

    您需要明确地将整数限制为 32 位:

    for x in range(-4,5):
       print "hex x %d 0x%08X" % (x, x & 0xffffffff)
    

    【讨论】:

    • 反转:h = int(s, 16); s, n = h >> 31, h & 0x7fffffff;如果不是,则返回 n else (-0x80000000 + n)
    • 对于超过 32 位,请使用 hex(x + 16**number_of_hex_digits)。例如 x=-9999999999 在 40 个十六进制数字处变为 0xfffffffffffffffffffffffffffffffdabf41c01L
    猜你喜欢
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 2014-09-18
    • 2012-12-14
    • 2012-11-12
    • 1970-01-01
    • 2017-06-22
    • 1970-01-01
    相关资源
    最近更新 更多