主题:一个十六进制的问题
lennon1958
[专家分:160] 发布于 2007-11-08 20:44:00
0xcafebabe 这个十六进制数是一个int类型的常量,请问一下 它是正数还是负数呢
,《java解惑》上说是负数,相当于-889275714,不知道为什么,请大家帮下忙
回复列表 (共2个回复)
沙发
U.S.S.R [专家分:1110] 发布于 2007-11-09 14:36:00
0xCAFEBABE = 0x 1100 1010 1111 1110 1011 1010 1011 1110
你可以发现,这个数从绝对值上看,是大于0x7FFFFFFF的。
也就是说,它的绝对值,已经超出了int型所能表达的数值上限;
那么,它实际上就是一个负数的补码。将此数取反后再加一,得到
0x 0011 0101 0000 0001 0100 0101 0100 0010
这个数代表的就是889275714。然后,既然是负数,前面加上一个负号就是了~
楼主可以用windows自带的计算器验证一下。
板凳
justforfun626 [专家分:18460] 发布于 2007-11-11 11:14:00
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.
我来回复