--byte是8位
--这里定义2种8位展现形式:1,符号形式(第一眼看符号位,判断正负,然后计算剩下7位的数值)。2,存储形式(内存中都是补码存储)
--想要知道一个数在内存中如何存储?真值 >> 符号形式 >> 补码 >> 存储形式
--示例1:
+8(真值)
+8(符号形式):0000 1000,//真值"+8",因为是"+",所以将第一位定义为0,因为值是"8",所以剩余7位是"000 1000"。
+8(反码): 0000 1000
+8(存储形式):0000 1000,//因为正数的补码就是本身,所以内存中的存储形式是"0000 1000"。
--示例2:
-8(真值)
-8(符号形式):1000 1000,//真值"-8",因为是"-",所以将第一位定义为1,因为值是"8",所以剩余7位是"000 1000"。
-8(反码): 1111 0111,
-8(补码): 1111 1000,
-8(存储形式):1111 1000,//经过取补码后,-8在内存中的存储形式是"1111 1000"
--已经知道一个数在内存中的存储形式,求这个数?存储形式 => 符号形式 >> 补码 >> 符号形式 >> 真值(注意:这里是"=>",不是">>",表示把"存储形式当前符号形式使用")
--示例1:
+8(存储形式):0000 1000
+8(符号形式):0000 1000,//把"0000 1000"当前符号形式,第一位是"0",说明这个数是正数,所以补码为本身
+8(补码): 0000 1000,
+8(符号形式):0000 1000,//第一位是"0",那么这个真值的符号是"+",后面7位是"000 1000",数值是"8"
+8(真值): //所以真值是+8
--示例2:
-8(存储形式):1111 1000
-8(符号形式):1111 1000,//把"1111 1000"当前符号形式,第一位是"1",说明这个数是负数,需要计算其补码
-8(反码): 1000 0111,
-8(补码): 1000 1000,
-8(符号形式):1000 1000,//第一位是"1",那么这个真值的符号是"-",后面7位是"000 1000",数值是"8"
-8(真值): //所以真值是+8
--验证:(byte)-8的存储形式是"1111 1000"
int i = -8;
System.out.println(Integer.toBinaryString(i)); //打印int类型在内存中的2进制表示,"1111 1111,1111 1111,1111 1111,1111 1000"
System.out.println((byte)i); //打印"-8",此时byte类型的-8的内存表示为int类型出去左边24位,也就是"1111 1000"是byte型-8的存储形式,和上述例子中的结果相符
--那么上面的这些例子和证明byte的范围有什么关系呢?
--byte为8位,所以要么全为"0000 0000",要么全部为"1111 1111",因为第一位是符号位,所以可以分为以下3部分。
--正数的范围: 0000 0001(代表+1) ~~ 0111 1111(+127)
--0的存储形式:0000 0000
--负数的范围: 1000 0000(代表-128) ~~ 1111 1111(-1)
--以上都是存储形式,正数和0就不解释了,解释下负数的范围:
--(1000 0000)求解过程:
(存储形式):1000 0000
(符号形式):1000 0000,//第一位是"1",说明这个数是负数,需要计算其补码
(反码): 1111 1111,
(补码): 1000 0000,//第一位是"1",那么这个真值的符号是"-",后面7位的反码是"111 1111",补码是"1000 0000",数值是"128"
(符号形式):1000 0000,//真值是"-128",
--(1111 1111)求解过程:
(存储形式):1111 1111
(符号形式):1111 1111,//第一位是"1",说明这个数是负数,需要计算其补码
(反码): 1000 0000,
(补码): 1000 0001,//第一位是"1",那么这个真值的符号是"-",后面7位的反码是"000 0000",补码是"000 0001",数值是"1"
(符号形式):1000 0000,//真值是"-1",
2.int >> byte
--(1).int的数值的范围是(-128~127):
--示例1:
int i = 64;
System.out.println(Integer.toBinaryString(i)); //存储形式:0000 0000,0000 0000,0000 0000,0100 0000
System.out.println((byte)i); //去除左边24位,剩余"0100 0000",这是存储形式,通过上述例子中的逆转方式,打印64
--示例2:
int i = -64;
System.out.println(Integer.toBinaryString(i)); //存储形式:1111 1111,1111 1111,1111 1111,1100 0000
System.out.println((byte)i); //去除左边24位,剩余"1100 0000",这是存储形式,通过上述例子中的逆转方式,打印-64
--(2).int的数值的范围是(>127,<-128):
--示例1:
int i = 128;
System.out.println(Integer.toBinaryString(i)); //存储形式:0000 0000,0000 0000,0000 0000,1000 0000
System.out.println((byte)i); //去除左边24位,剩余"1000 0000",这是存储形式,通过上述例子中的逆转方式,打印-128
--示例1:
int i = -129;
System.out.println(Integer.toBinaryString(i)); //存储形式:1111 1111,1111 1111,1111 1111,0111 1111
System.out.println((byte)i); //去除左边24位,剩余"0111 1111",这是存储形式,通过上述例子中的逆转方式,打印127