9

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を-0x04ではなく0xFFFFFFFCに変換する、欠落しているフォーマットのトリックはありますか?

4

1 に答える 1

18

整数を32ビットに明示的に制限する必要があります。

for x in range(-4,5):
   print "hex x %d 0x%08X" % (x, x & 0xffffffff)
于 2010-09-30T15:00:42.250 に答える