A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Raymond1011 中级黑马   /  2013-12-3 12:55  /  2145 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天在看毕老师的视频的时候,毕老师讲到负数的二进制的时候举了一个这样的例子。计算-6的二进制。经过一番运算,得到的结果为1111-1111-1111-1111-1111-1111-1111-1010=-6。但是我做了一个大胆的假设,如果我要是求这个二进制数对应的十进制数为正数的话哪又会是多少?
   经过一番计算得到的结果是4294967290.于是我凌乱了。
谁能告诉我为什么得到的结果会不一样啊,这到底是哪里出的错啊?

评分

参与人数 1技术分 +1 收起 理由
贺奕凯 + 1

查看全部评分

6 个回复

倒序浏览
本帖最后由 ily521125 于 2013-12-3 13:22 编辑

在补码中:

  • 最高位为1,表示负数;
  • 正数的补码取反加1后,为其对应的负数的补码;负数的补码取反加1后,为其对绝对值;
  • 正数的补码为其本身。

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

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


评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
补码是什么啊?表示二进制吗?还有就是为什么你写的最后都要加个b呢?2bh又是什么啊?十六进制吗
回复 使用道具 举报
本帖最后由 JACK...... 于 2013-12-3 13:57 编辑

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

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

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


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

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

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


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








评分

参与人数 1技术分 +1 收起 理由
贺奕凯 + 1 赞一个!

查看全部评分

回复 使用道具 举报
Raymond1011 发表于 2013-12-3 13:42
补码是什么啊?表示二进制吗?还有就是为什么你写的最后都要加个b呢?2bh又是什么啊?十六进制吗 ...

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


是啊,我是以一个字节的情况说的,64位的和它是一样的道理啊
回复 使用道具 举报
下次问题解决了就把类型改成提问结束!谢谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马