示例p/x
:
(gdb) p/x (long long)-2147483647 #still works
$1 = 0xffffffff80000001
(gdb) p/x (long long)-2147483648 #truncated once input exceed max int
$2 = 0x80000000
(gdb) p/x (long long)-2147483649
$3 = 0x7fffffff
(gdb) whatis $1
type = long long
(gdb) whatis $2
type = long long
(gdb) whatis $3
type = long long
并且p/u
:
(gdb) p/u (long long)-2147483647
$1 = 18446744071562067969
(gdb) p/u (long long)-2147483648
$2 = 2147483648
(gdb) whatis $1
type = long long
(gdb) whatis $2
type = long long
我一直认为这是gdb错误,但现在我想我可能会误解并决定在这里发布这个问题。
输出(根据评论要求):
(gdb) whatis -2147483647
type = int
(gdb) whatis -2147483648
type = unsigned int
(gdb) whatis -2147483648LL
type = long long
(gdb) p (long long)-2147483648LL
$1 = -2147483648