学习C语言的时候对int类型范围理解得不透彻,所以通过网上查询资料,结合大牛的讲解分析了一下byte类型的范围,希望可以帮到大家。
1、知识理解
在计算机内,定点数有3种表示法:原码、反码和补码
[原码]二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
[反码]表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
[补码]表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
计算机数据是用补码表示的,正数的补码就是它的原码,而负数的补码是将其原码(取绝对值后的原码)取反加1得到的。
2、理解方式11.确定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这个值)