byte类型取值范围为啥是127到-128
计算机有3种编码方式表示一个数,
对于正数而言,原反补都一样。
对于负数,就厉害了:
-1 = 10000001(原)= 11111110(反)= 11111111(补)
人脑可以把符号位特殊处理,但是对于计算机如何处理符号位,在电路设计上就是十分复杂了
1 - 1 = 1 +(-1)这样就计算机就只处理加法就可以了
1-1=1 +(-1)= 0000 0001+1000 0001 = 1000 0010 = -2
所以计算机无法用原码表示
所以出现了反码
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类型, 可以表示范围是: 用补码表示时又可以多保存一个最小值。
总觉得还是哪里不对
.
.
.
应该都知道钟表那个比喻
回拨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个位置,总得用完,留空了多浪费啊。
■网友
1.byte类型:字节数据类型,有符号型,占一个字节,即8位。则问题可以转化为8位有符号整数的取值范围为多少?
2.数据在计算机中用二进制串表示,对于带符号整数,为了统一加减运算,计算机使用补码表示,则问题可以继续转化为使用补码表示的8位二进制数的取值范围为多少?
3.补码的运算法则:
即:一个正数的补码就是它本身,一个负数的补码等于模减去其负数的绝对值
模:n位二进制数,其模为
, 8位的话,模=
4.验证:
所以byte范围是可以取到-128的。
5.推广开来:补码表示的n位二进制数的取值范围是
推荐阅读
- 怎样评价类似前橙会、百老汇、南极圈这样类型的离职帮抱团,对企业的积极意义和消极意义
- 请问现在做淘宝客有名的网站有哪些
- 都有啥画画培训机构南京晓庄这边
- 网红的类型有哪些,具备哪些共性和差异性
- CPM 点击率(CTR)、损失率 和 LandingPage 的跳出率,这几个数值之间关系,一般网站这些数值取值区间是多少
- Python中怎样在list中保存class类型的数据
- 如果让你发明一个实用app,你会发明啥类型的app
- Java中为啥boolean类型是原子性的
- 怎样判断自己的宽带线路类型,光纤还是网线
- 乔杉|类型丰富助推票房!12月电影市场30多部影片扎堆上映
