关于数制
现在常用的数制有:10进制,2进制,8进制,16进制
基本数据类型所占的存储单元
计算机最底层都是2进制。
一个2进制叫做一个位(bit)
8个位(bit)叫做一个字节(byte)
一般情况下一个int占用4个字节,也就是32位(bit)
如果需要表达负数,则把第一个位(bit)作为符号位,0代表正数,1代表负数
short:2byte
int:4byte
long:4byte
float:4byte
double:8byte
char:1byte
计算数据类型的取值范围
原码,反码,补码
正数的源码,反码,补码都是其2进制本身
负数的反码就是符号位不变,对剩余的2进制数取反
负数的补码就是符号位不变,对剩余的2进制数取反后在+1
计算机中数据的实际存储的是补码。
我们现在假设有一种数据类型只占用3位(bit)
- 如果他是一个无符号位的则很容易计算取值范围
补码:000-111 就是0~7 - 如果他是一个有符号位的,我们计算一下:
十进制4:源码:000。反码:000。补码:000(溢出无效,由于和0的值冲突了,所以无效)
十进制3:源码:011。反码:011。补码:011
十进制2:源码:010。反码:010。补码:010
十进制1:源码:001。反码:001。补码:001
十进制0:源码:000。反码:000。补码:000
十进制-1:源码:101。反码:110。补码:111
十进制-2:源码:110。反码:101。补码:110
十进制-3:源码:111。反码:100。补码:101
十进制-4:源码:100。反码:111。补码:100
所以取值范围是-4~3。
不对称的原因是虽然正数和负数的取值空间是一样的,但是正数是从0开始的。
同理
无符号int取值范围是0~2的32次方-1
有符号的int取值范围是-2的31次方~2的31次方-1
使用补码的意义就是+1和-1相加正好等于0,便于计算。