黑马程序员技术交流社区

标题: 关于负数二进制表现形式 [打印本页]

作者: 曹强    时间: 2014-5-16 13:15
标题: 关于负数二进制表现形式
负数二进制表示就是二进制取反+1。我有点很疑惑,比如-6的二进制,前面有很多1组成的二进制数,但是如果将这个数再进行二进制到十进制的转换,就是分别*2的n次幂,得到一个很大的数,那这个2进制数到底表示那个啊,不是太懂,求大神解答
作者: 宋美成    时间: 2014-5-16 13:48
朋友,如果一个二进制数它的最高位为1的话,那么我们就可以说他是负数了,最高位是符号位!!(比如说我们通常是用八位二进制数去表示一个整数,若不够,则再增加八位)一定要弄清楚这个概念。当我们看到一个二进制它的最高位是1,那么我们要进行逆运算,就是减一取反,在通过分别乘以2的n次幂来转换成十进制!
作者: 曹强    时间: 2014-5-16 13:56
宋美成 发表于 2014-5-16 13:48
朋友,如果一个二进制数它的最高位为1的话,那么我们就可以说他是负数了,最高位是符号位!!(比如说我们 ...

那哪些事最高位是符号啊,还是不太懂。如果二进制位数里的全是1,就按我的错的方法求出来的数,这个整数肯定会存在,按你的方法怎么求
作者: 曹强    时间: 2014-5-16 14:01
宋美成 发表于 2014-5-16 13:48
朋友,如果一个二进制数它的最高位为1的话,那么我们就可以说他是负数了,最高位是符号位!!(比如说我们 ...

好吧,我懂了………………
作者: 宋美成    时间: 2014-5-16 14:05
曹强 发表于 2014-5-16 13:56
那哪些事最高位是符号啊,还是不太懂。如果二进制位数里的全是1,就按我的错的方法求出来的数,这个整数 ...

比如说正数6: 二进制:110;这里要补全八位(以八位为例),变成:0000  0110
        负数-6: 二进制为:1111  1010:最左边那位为最高位,这里可以看出是负数,如果想要转换成十进制,那么先减一取反变成:0000 0110,这个数化为十进制为6,但由于原二进制最高位是1,所以我们得到的是负数,最后的结果就是-6了。
作者: 曹强    时间: 2014-5-16 14:06
本帖最后由 曹强 于 2014-5-16 14:11 编辑

貌似6是110,前面的0可以省略,-6前面的1不能省略吧
作者: 宋美成    时间: 2014-5-16 14:14
曹强 发表于 2014-5-16 14:06
貌似6是110,前面的0可以省略,-6前面的1不能省略吧

对啊,6是110,但是如果我们要算-6的话,我们先得把+6的那八位补齐吧,然后通过取反加一才能得到-6的二进制啊
作者: 曹强    时间: 2014-5-16 14:22
宋美成 发表于 2014-5-16 14:14
对啊,6是110,但是如果我们要算-6的话,我们先得把+6的那八位补齐吧,然后通过取反加一才能得到-6的二进 ...

-6的取反是先算出6的二进制,把32位2进制都补全,前面还有24个1呢,不可以省略吧
作者: 宋美成    时间: 2014-5-16 14:24
曹强 发表于 2014-5-16 14:22
-6的取反是先算出6的二进制,把32位2进制都补全,前面还有24个1呢,不可以省略吧 ...

恩恩,对的,我这里只是用8位做了个例子
作者: 曹强    时间: 2014-5-16 14:27
宋美成 发表于 2014-5-16 14:24
恩恩,对的,我这里只是用8位做了个例子

那我们就以8位数做例子,那我问你123怎么表示,不是1111 1010吗?如果是,那1111 1010到底表示什么?
作者: 宋美成    时间: 2014-5-16 14:40
曹强 发表于 2014-5-16 14:27
那我们就以8位数做例子,那我问你123怎么表示,不是1111 1010吗?如果是,那1111 1010到底表示什么? ...

额,我算的123,二进制是:0111 1011;那么-123就是1000 0101啊,so~
作者: 曹强    时间: 2014-5-16 15:09
本帖最后由 曹强 于 2014-5-16 15:15 编辑
宋美成 发表于 2014-5-16 14:40
额,我算的123,二进制是:0111 1011;那么-123就是1000 0101啊,so~

哥哥啊,-6后8位就是1111 1010,我刚搞错了,1111 1010代表的是251,给你搞糊涂了,251怎么表示
作者: 曹强    时间: 2014-5-16 15:16
曹强 发表于 2014-5-16 15:09
哥哥啊,-6后8位就是1111 1010,我刚搞错了,1111 1010代表的是251,给你搞糊涂了,251怎么表示 ...

难道要在前面加个0表示,变成0 1111 1010不成,然后把0省略,然后就又一样了
作者: 宋美成    时间: 2014-5-16 15:18
加我Q吧,我给你好好说这个问题~690993270
作者: 宋美成    时间: 2014-5-16 15:20
曹强 发表于 2014-5-16 15:16
难道要在前面加个0表示,变成0 1111 1010不成,然后把0省略,然后就又一样了 ...

你这里是假设的用八位去表示对吧,八位二进制最多能表示到127,你这都251了,显然八位已经不能满足要求了啊,加我Q吧,我给你好好说这个问题~690993270




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