代码之家  ›  专栏  ›  技术社区  ›  grieve

在python中以十六进制打印负值

  •  7
  • grieve  · 技术社区  · 14 年前

    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变成0xfffffc而不是-0x04?

    1 回复  |  直到 14 年前
        1
  •  18
  •   kennytm    14 年前

    您需要将整数显式限制为32位:

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