数据类型 | 占用空间 | 取值范围 |
---|---|---|
short | 2字节 | -2^15 ~ 2^15-1 |
int | 4字节 | -2^31 ~ 2^31-1 |
unsigned int | 4字节 | 0 ~ 2^32-1 |
long | 4字节(32位系统),8字节(64位系统) | -2^31 ~ 2^31-1 |
long long | 8字节 | -2^63 ~ 2^63-1 |
- 数据是以补码的形式存储在计算机中的
- 补码中存在符号位(最高位)与数据为(其余各位),
- 符号位中: 0代表正,1代表负
- 正数的原码、反码、补码都相同
- 负数的反码:原码符号位不变,其余各位取反
- 负数的补码:反码+1
例如正数:11
原码: | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 |
反码: | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 |
补码: | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 |
例如负数:-11
原码: | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 |
反码: | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 |
补码: | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 |
- 对运算规则有了了解之后可能会疑惑:1字节的取值范围不应该是: -2^7-1 ~ 2^7-1
- 但实际上是:-2^7 ~ 2^7-1
- 原因是:大于等于0范围:0~127 原码表示为0000 0000 ~ 0111 1111
- 负数范围:-128 ~ -1 原码表示为 1000 0000 ~ 1000 0001
- 最终结论是,-2^7使用1000 0000表示,也可以理解为使用“负0”表示最小值