java 八种数据类型大小范围详解
序号 | 数据类型 | 位数 | 字节 | 默认值 | 取值范围 | 举例说明 |
---|---|---|---|---|---|---|
1 | byte(位) | 8 | 1字节 | 0 | -2^7 - 2^7-1 | byte b = 10; |
2 | short(短整数) | 16 | 2字节 | 0 | -2^15 - 2^15-1 | short s = 10; |
3 | int(整数) | 32 | 4字节 | 0 | -2^31 - 2^31-1 | int i = 10; |
4 | long(长整数) | 64 | 8字节 | 0 | -2^63 - 2^63-1 | long l = 10l; |
5 | float(单精度) | 32 | 4字节 | 0.0 | -2^31 - 2^31-1 | float f = 10.0f; |
6 | double(双精度) | 64 | 4字节 | 0.0 | -2^63 - 2^63-1 | double d = 10.0d; |
7 | char(字符) | 16 | 2字节 | 空 | 0 - 2^16-1 | char c = ‘c’; |
8 | boolean(布尔值) | 8 | 1字节 | false | true、false | boolean b = true; |
对取值范围的解释:
一个字节是8位,最高位是符号位,最高位为0则是正数。最高位为1则是负数
以byte类型为例:
byte:8位二进制
8位二进制 的补码组合序列有256个
0000 0000 - 0111 1111 0 ~+127
1000 0000
1000 0001 - 1111 1111 -1~-127
再看看这个规律表
原码 补码 值
0111 1111 0111 1111 +127
0111 1110 0111 1110 +126
… … 补码不断-1…
0000 0000 0000 0000 0
1000 0001 1111 1111 -1
1000 0010 1111 1110 -2
1000 0011 1111 1101 -3
… … 补码不断-1…
1111 1111 1000 0001 -127
? 1000 0000 -128
此时,补码值为最低位-128的原码无法表达,
于是就有了规定:
原本应该表示 -0 的原码:1000 0000 定为 -128的原码
这样规定后,负数的补码在机器中就好算了。
故 取值范围 n位: -2^(n-1) ~ 2^(n-1) -1