byte类型取值范围为啥是127到-128

计算机有3种编码方式表示一个数,
对于正数而言,原反补都一样。
对于负数,就厉害了:
-1 = 10000001(原)= 11111110(反)= 11111111(补)
人脑可以把符号位特殊处理,但是对于计算机如何处理符号位,在电路设计上就是十分复杂了
1 - 1 = 1 +(-1)这样就计算机就只处理加法就可以了
1-1=1 +(-1)= 0000 0001+1000 0001 = 1000 0010 = -2
byte类型取值范围为啥是127到-128

所以计算机无法用原码表示
所以出现了反码
1-1=1 + (-1) = 0000 0001(原) + 1000 0001(原)= 0000 0001(反)+ 1111 1110(反)= 1111 1111(反) = 1000 0000(原)= -0
这样就对了,但是-0这个问题没法解决
所以又有了补码
1-1 = 1 + (-1) = 0000 0001(原) + 1000 0001(原) = 0000 0001(补) +1111 1111(补)= 0000 0000(补)=0000 0000(原)
这样-0就不存在,还可以用1000 0000表示-128
所以32位int类型, 可以表示范围是: 用补码表示时又可以多保存一个最小值。
byte类型取值范围为啥是127到-128


总觉得还是哪里不对
.
.
.
应该都知道钟表那个比喻
回拨2小时 = 前拨10小时
回拨4小时 = 前拨8小时
回拨5小时= 前拨7小时
-2与10同余,-4与8同余,-5与7同余
a ≡ a (mod m)
如果a ≡ b (mod m),c ≡ d (mod m) 那么:
(1)a ± c ≡ b ± d (mod m)
(2)a * c ≡ b * d (mod m)
同余定理证明过程
http://baike.baidu.com/view/79282.htm
(-1) mod 128 = 127
127 mod 128 = 127
2-1 ≡ 2+127 (mod 128)
?(???????)? 舒服多了

所以这个问题并不简单,如果一直感觉哪里不对,又说服不了自己,就想办法搞懂吧,不然心里永远是个结。
至少看到这个证明前我是睡不好的
详细证明:
原码, 反码, 补码 详解 - ziqiu.zhang - 博客园


■网友
给你画个图,其他整型也类似。这个表盘上有256个位置,总得用完,留空了多浪费啊。byte类型取值范围为啥是127到-128


■网友
1.byte类型:字节数据类型,有符号型,占一个字节,即8位。则问题可以转化为8位有符号整数的取值范围为多少?
2.数据在计算机中用二进制串表示,对于带符号整数,为了统一加减运算,计算机使用补码表示,则问题可以继续转化为使用补码表示的8位二进制数的取值范围为多少?
3.补码的运算法则: byte类型取值范围为啥是127到-128

即:一个正数的补码就是它本身,一个负数的补码等于模减去其负数的绝对值
模:n位二进制数,其模为 byte类型取值范围为啥是127到-128
, 8位的话,模= byte类型取值范围为啥是127到-128

4.验证: byte类型取值范围为啥是127到-128

所以byte范围是可以取到-128的。
5.推广开来:补码表示的n位二进制数的取值范围是 byte类型取值范围为啥是127到-128




推荐阅读