关于Java中Byte类型的取值范围是-128~127的理解

学习C语言的时候对int类型范围理解得不透彻,所以通过网上查询资料,结合大牛的讲解分析了一下byte类型的范围,希望可以帮到大家。

1、知识理解

在计算机内,定点数有3种表示法:原码、反码和补码 

[原码]二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。 

[反码]表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。 

[补码]表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。

计算机数据是用补码表示的,正数的补码就是它的原码,而负数的补码是将其原码(取绝对值后的原码)取反加1得到的。

2、理解方式1

1.确定byte是1个字节,也就是8位 

2.最大的应该是0111 1111,因为第一位是符号位,0表示正数 

3.最小的应该是1000 0000(1111 1111是是负数-1的补码) 

4.0111 1111即127 

5.1000 0000按照上面的解释为先减一,得到0111 1111,然后按位取反得到1000 0000,该结果为欲求负数的绝对值,所以结果是-128(和概念反着来求出该负数)

3、理解方式2

0 00000000 

1 00000001
…….
127 01111111
----------------
正数(包括0)共 128 个 



-1 11111111
-2 11111110
……
-128 10000000 
---------------- 
负数共 128 
我们都知道byte占8位。而2的8次方等于256,也就是byte最多可以表示256个不同的数,
0~127:128个
-0~127:128个
但是这里0与-0表示一样的数了,所以就用-0的二进制补码表示到-128里面去了(这里是关键,也就是说-0的补码用来表示-128了,根据理解方式1中 的第五步,-0的补码"10000000"通过逆向计算刚好得到-128这个值)
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值