理解Java的数字溢出
Java各个数字类型所占的存储空间:
整型
- byte:1字节,1*8bit,取值范围-128~127
- short:2字节,2*8bit,取值范围-32768~32767
- int:4字节,4*8bit,取值范围-2147483648~2147483647
- long:8字节,8*8bit,取值访问-2^64~2^64-1
浮点型
- float:4字节,4*8bit
- double:8字节,8*8bit
char类型
java里,char也是数字类型,可以与其他数字类型转换
- char:2字节,2*8bit
数值溢出
当存储一个超出类型的取值范围的数值,这样就会导致数字溢出。溢出的数值会被截去高位数值,保留类型所能存储的位数。
如
byte b = (byte)400; // -112
400表示为二进制
0000 0001 1001 0000
byte只能存储8位,截去高位数值得到:
1001 0000
在此8位数字里,(10010000 - 1)取反得到112,所以结果为-112