背景:
经常搞混bit与byte的区别,所以在此记录
目录
1、bit与bite的区别
计算机是一系列的电路开关。每个开关都存在两种状态 :关和开。如果电路是开的,它的值就是1。如果电路是关的,它的值就是0.
一个0或者一个1存储为一个比特(bit),是计算机中最小的存储单元。
计算机中最基本的存储单元是字节(byte)。每个字节由8个比特构成。
2、存储占用空间
存储单元是对存储数据来说的,比如一个文件有多少字节
存储单位按1024进制 2 的 10 次方
1byte = 8bit
1byte就是1B
1024B = 1KB
1024KB = 1M
3、Java数值基础类型的存储空间与数值范围
官方定义
byte(1字节) short(2字节) int(4字节) long(8字节)
问题:如何记得各个类型的范围
证明:
因为:1byte 等于 8个bit。
1个bit 只能由0或1表示,是两种可能。
两种可能用数学的方式表示:2的1次方 记做 2^1
那么:
8个bit 记做 2^8
也就是说 1byte = 2^8
1byte可以存储256个数值
又因为:
由于还要表示正负
表示的数值个数只能对半分,所以要除以2 也是 2^(8-1)
所以最小数值是 -2^7
还需要表示0,占了一个数值
最大数值是2^7-1
综上所述:
1byte的范围是 -2^7 到 2^7-1
byte(1字节) = 8 bit = -2^(8-1) = 2^7 得到范围: -2^7 到 2^7-1
short(2字节) = 16bit = -2^(16-1) = 2^15 得到范围:-2^15 到 2^15-1
int(4字节) = 32bit = -2^(32-1) = 2^31 得到范围:-2^31 到 2^31-1
long(8字节)= 64bit = -2^(64-1) = 2^63 得到范围:-2^63 到 2^63-1
4、1byte在二进制中如何表示
下图结果是什么?
byte b1 = 127;
b1++;
System.out.println(b1);
图解
二进制转10进制的过程
原码推理到反码的过程
验证结果
上图说这是127
二进制加1后变成下图,也就是-128
负128为什么这样表示?
反码推到源码的过程
验证结果
知识点总结:
1、负数用反码表示
2、反码= 补码+1
3、补码= 反码-1
4、补码就是所有位取反,只是推算过程,无其他意义
5、正整数,位数不足时,补0;负整数位数不足时,补1
验证
byte的正12 与short的正12
byte的负12 与short的负12