有如下代码,判断a、b的值
short a = 128;
byte b = (byte) a;
结果为:
a = 128
b = -128
为什么呢??????????????????
byte 站一个字节 取值范围:-128~127 最高位为符号位,
short 站2个字节 取值范围:-32768~32767 最高位为符号位,
计算机中负数的存储方式是补码。
(对负数的绝对值的二进制取反,再加一,即为负数的二进制码)
-1的绝对值1的二进制码为0000 0001,取反1111 1110,加一为1111 1111
-128的绝对值128的二进制码为1000 0000,取反0111 1111,加一为1000 0000,是byte最大表示范围
-129的绝对值129的二进制码为1000 0001,取反0111 1110,加一为0111 1111,是127了
-127的绝对值127的二进制码为0111 1111,取反1000 0000,加一为1000 0001,
所以,short为128是,存储为0000 0000 1000 0000
强制转换为1byte时,取后一字节为:1000 0000
所以就成 -128 了
阅读(785) | 评论(0) | 转发(0) |