黑马程序员技术交流社区

标题: 小问题求解 [打印本页]

作者: gtf    时间: 2014-6-30 18:29
标题: 小问题求解
大家都知道byte 类型的-128的二进制形式是1000 0000.
谁帮我具体讲讲为什么是这样的?怎么得来的。
谢谢

作者: 燿陚√揚葳    时间: 2014-6-30 18:51
负数的二进制是这个数取反加1
比如-6的二进制,6的二进制是0000-0110取反就是1111-1001再加1就是1111-1010
同理-128二进制,先看128二进制为1000-0000取反为0111-1111再加1不就是1000-0000吗
负数二进制前面都是1,这样只是取了最有效的八位
128二进制为 0000-0000 0000-0000 0000-0000 1000-0000 32位的
-128二进制为1111-1111 1111-1111 1111-1111 1000-0000
他们是不同的

作者: Whero    时间: 2014-6-30 19:14
本帖最后由 Whero 于 2014-6-30 19:16 编辑

C:\Users\XK-21\Desktop\1.jpg

1.jpg (180.84 KB, 下载次数: 78)

我用笔算的,这样能更具体点

我用笔算的,这样能更具体点

作者: 沐子松/kf    时间: 2014-6-30 19:16
学习                 
作者: gtf    时间: 2014-6-30 20:11
燿陚√揚葳 发表于 2014-6-30 18:51
负数的二进制是这个数取反加1
比如-6的二进制,6的二进制是0000-0110取反就是1111-1001再加1就是1111-1010
...

谢谢了
作者: 燿陚√揚葳    时间: 2014-6-30 22:19
gtf 发表于 2014-6-30 20:11
谢谢了

不客气:)
作者: 玉冰竹    时间: 2014-6-30 22:44
-128的二进制表示为1000 0000
第一位是符号位,1代表是负数,0代表是正数。
后七位用来存储数据,1111 1111是把所有的位来存数据,首位为1,表示是最大的负数,即-1.
再来看正数的最大值,为0111 1111,首位为0,是正数,即127.
用-1来减去127即得到-128,用-1和127的二进制表示去做减法即可得到-128的二进制为1000 0000
希望可以帮到你!
作者: 死海古卷    时间: 2014-6-30 23:00
6os回复 很烦人的
作者: 遗失的美好YXJ    时间: 2014-6-30 23:16
本帖最后由 遗失的美好YXJ 于 2014-6-30 23:23 编辑

今天正好学2进制,一开始也是云里雾里的,不过现在觉得应该弄明白怎么回事了.为什么那么难理解的原因是:负数的二进制是先有结果(负数的二进制码在计算机中按照逻辑就应该这样的),然后再有正数怎么转化成二进制的方法(正数的二进制取反加1).我们很容易误解为,转换方法是先定义好的,负数的二进制表示是由方法得出来的,其实正好相反.


为了说byte型的-128为什么是1000 0000,我先说为什么byte型的-1为什么是1111 1111;这其实是一个问题,弄懂-1,-128一样的.
因为byte型只有8个bit.可以表示的数据总量是256个.又要必须得能表示负数第一位设计用来表示正负的符号位.
那么正数的1是0000 0001(这个很好理解),那么1+(-1)=0,0是0000 0000,整个1+(-1)=0(1 0000 0000存入byte中1被舍去了)必须符合二进制加法的运算逻辑,那么-1必须是1111 1111.所以是先得出的-1的byte型的结果是1111 1111(这里我不是用0000 0001取反+1得出的).用同样的逻辑可以得到byte型的-2是1111 1110;然后依次类推一直可以得到1000 0000是-128.然后再根据byte型的2进制正负数的关系总结出的方法:正数的二进制位取反加1就是负数的二进制表示.
所以负数的二进制码按先有负数的二进制码这个结果,再总结出算负数二进制码的方法.现在书本上直接跟你说负数的二进制是正数取反+1,有点本末倒置,所以比较难理解.
(以上纯属个人理解)








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2