byte范围为什么是(-128~127)?



--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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值