理解Java的数字溢出

时间:2022-06-01 17:05:31

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