回 帖 发 新 帖 刷新版面

主题:一个十六进制的问题

0xcafebabe 这个十六进制数是一个int类型的常量,请问一下 它是正数还是负数呢
,《java解惑》上说是负数,相当于-889275714,不知道为什么,请大家帮下忙

回复列表 (共2个回复)

沙发

0xCAFEBABE = 0x 1100 1010 1111 1110 1011 1010 1011 1110
你可以发现,这个数从绝对值上看,是大于0x7FFFFFFF的。
也就是说,它的绝对值,已经超出了int型所能表达的数值上限;
那么,它实际上就是一个负数的补码。将此数取反后再加一,得到
0x 0011 0101 0000 0001 0100 0101 0100 0010
这个数代表的就是889275714。然后,既然是负数,前面加上一个负号就是了~

楼主可以用windows自带的计算器验证一下。

板凳

Any signed type integer/long/short/byte, if the first bit is one, then it is a negative number.

The first bit is a sign bit. 0 positive, 1 negative.

BTW, USSR's explanation is correct for your question.

我来回复

您尚未登录,请登录后再回复。点此登录或注册