关于Java中Byte类型的取值范围的理解

来源:互联网 发布:安卓手机设置网络 编辑:程序博客网 时间:2024/06/05 11:27

【转载自夏亦流风播客】点击打开链接

学习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这个值)
阅读全文
0 0