为什么127+1是等于-128
java中字节型数据范围是-128~127;为什么-128-1就会等于127;127+1又等于-128了呢?到底怎么算的啊?
java
字节
------解决方案--------------------字节长度是8位,最左位是符号位
127的二进制: 0111 1111
-1的二进制: 1111 1111,加一为全0,
-2的二进制: 1111 1110
……
-128的二进制: 1000 0000
因而 127+1=-128
------解决方案--------------------java中byte类型作计算,都会先转换成int类型再计算。
比如
byte b = 127 + 1;//这样写报错:Type mismatch: cannot convert from int to byte
所以必须强制类型转换:
byte b = (byte) (127 + 1);
因此就能理解为什么是-128了:
int型的127在计算机内的二进制是:
0000 0000 0000 0000 0000 0000 0111 1111
加1后变成:
0000 0000 0000 0000 0000 0000 1000 0000
即128
强制转换后截取低8位变成
1000 0000
这是byte类型-128的补码。
------解决方案--------------------希望你用的是win7,打开附件里面的计算器。查看>程序员
下面数字键左边选择,十进制和字节
输入127,你可以看到数字下边的二进制
0111 1111
然后+1,你会看到二进制很正常的变成了
1000 0000,
但是显示的是-128
因为最高位是符号位
------解决方案--------------------数据溢出,byte 一个字节8为只能保存,256个数字,byte 从 -128到 +127,
最大的再加 >1的数就会数据溢出,最小的再减 >1的也会溢出.
127+1 = -128;
127+2 = - 127;
127+3 = -126;
-128 - 1 = 127;
不光是byte类型,short、int、long、float、double 都会数据溢出。其实5楼分析的很充分了。