黑马程序员技术交流社区

标题: 关于负数二进制的问题 [打印本页]

作者: Raymond1011    时间: 2013-12-3 12:55
标题: 关于负数二进制的问题
今天在看毕老师的视频的时候,毕老师讲到负数的二进制的时候举了一个这样的例子。计算-6的二进制。经过一番运算,得到的结果为1111-1111-1111-1111-1111-1111-1111-1010=-6。但是我做了一个大胆的假设,如果我要是求这个二进制数对应的十进制数为正数的话哪又会是多少?
   经过一番计算得到的结果是4294967290.于是我凌乱了。
谁能告诉我为什么得到的结果会不一样啊,这到底是哪里出的错啊?
作者: ily521125    时间: 2013-12-3 13:14
本帖最后由 ily521125 于 2013-12-3 13:22 编辑

在补码中:
    比如你说的-6:
    6的补码为:00000110b,取反加1后为:11111010b,表示-6;
    -6的补码为:11111010b,取反加1后为:00000110,其绝对值为6;

    从一个负数的补码不太容易看出它所表示的数据,比如:11010101b 表示的数据是多少?
   解:利用补码特性,将11010101b 取反加 1 后为:00101011b。
          可知 11010101b表示的负数的绝对值为:2BH,则 11010101b表示的负数-2BH



作者: Raymond1011    时间: 2013-12-3 13:42
补码是什么啊?表示二进制吗?还有就是为什么你写的最后都要加个b呢?2bh又是什么啊?十六进制吗
作者: JACK......    时间: 2013-12-3 13:45
本帖最后由 JACK...... 于 2013-12-3 13:57 编辑

你好,很高兴为你解答问题。我是 黑马Jack
(截图太多,没赶上一楼。。。。)

首先,你对-6的绝对值进行取反然后加一,最后得到其相对应的二进制数没错。
不过,你别忘了,你是在int类型下操作的,int类型为32位

你应该是把,你最后的结果直接粘贴到计算器中,做相对应的转换了把。,如图:


同学我要提醒你的是,你的做法No problem,
问题在于,你忽略了计算器的二进制位,如图:

人家是63位,好好想想负数用二进制表示,
是不是,第一位必须为1啊。。如图:

现在,知道了把,下面给你做了正确的专制 如图:


谢谢你提出的问题。
让我们共同奔跑在黑马的梦想线上把。
我QQ:1023370982
问题互相讨论
共赢你我实现









作者: ily521125    时间: 2013-12-3 16:03
Raymond1011 发表于 2013-12-3 13:42
补码是什么啊?表示二进制吗?还有就是为什么你写的最后都要加个b呢?2bh又是什么啊?十六进制吗 ...

补码就是反码加1,小b表示二进制,H表示十六进制,2BH表示十六进制数2B,转化为十进制就是2x16+Bx1=43
作者: ily521125    时间: 2013-12-3 16:08
JACK...... 发表于 2013-12-3 13:45
你好,很高兴为你解答问题。我是 黑马Jack
(截图太多,没赶上一楼。。。。)


是啊,我是以一个字节的情况说的,64位的和它是一样的道理啊
作者: 简★零度    时间: 2013-12-5 22:52
下次问题解决了就把类型改成提问结束!谢谢!




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