1

gdb では、

(gdb) p -2147483648
$28 = 2147483648
(gdb) pt -2147483648
type = unsigned int

-2147483648は type の範囲内にあるintのに、なぜ gdb はそれをunsigned int?

(gdb) pt -2147483647-1
type = int
(gdb) p -2147483647-1
$27 = -2147483648
4

2 に答える 2

2

数字の値の型を設定した後、gdb が単項否定演算子を適用すると思われます。

ケース 1: gdb は型2147483648をオーバーフローして になる解析を行います。次に、否定を適用します。intunsigned int

ケース 2:2147483647は有効intであり、その後に否定と減算が適用されたときに int のままになります。

于 2013-10-26T15:54:53.613 に答える