为什么整数基本数据类型取值范围要-1?

79 阅读1分钟

概览

数据类型位数字节范围
byte8位1-27~27-1
short16位2-215~215-1
int32位4-231~231-1
long64位8-263~263-1

二进制表示

原码

最高位表示符号位,0表示正数,1表示负数
八位二进制

+3
0000 0011
-3
1000 0011

反码

正数:正数的反码与原码相同
负数:除符号位外每一位按位取反

+3
0000 0011
-3
1111 1100

补码

正数:补码与原码相同
负数:除符号位外每一位按位取反,再加1
补码用全0表示0

+3
0000 0011
-3
1111 1101
0
0000 0000

在计算机中,用补码来表示有符号整数

为什么-1?

综上,我们可以知道,补码最高位为1,表示负数,最高位为0,表示正数
以short(16位)为例
补码最小值为:1000 0000 0000 0000=-215
补码最大值:0111 1111 1111 1111 = 215-1
正数范围最高位0作为符号位,因此取不到215,如果取到了也就意味着数值溢出了变成了负数:
1111 1111 1111 1111,负数,为-1