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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yapo 中级黑马   /  2015-4-27 22:37  /  604 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

之前上课不理解为什么要分补码和反码,后来仔细想想,应该是这样的
计算机是用二进制来存储和运算数据,但是数值有正负之分,所以人会参照数学课本上十进制的标记方法,
数字前面用“+”—“符号来区分正负,同理:二进制中也设立符号位,最高位1表示负,最高位为0则表示正。例如:
      十进制中:   +           6         对应负数      -           6
          二进制      0       000 0110  对应负数    1       000 0110
                     符号位    数值位                     符号位    数值位

         上述方式人能够比较直观辨别出正负数及其数值,但是如果计算机底层也用这种方法存储运算正负数,运算起来很不方便。
         我们是这样定义正负数的:正数 + 对应负数= 0,用以上方式表示负数,计算机不可以直接进行正负数运算,需要
         设计一套电路来转换负数数值,这样电路就变得更复杂。
         根据计算机运算规则:要想使两个二进制数相加等于0,即结果中所有位都变成0.我们发现(计算机中没有减法),
           二进制正数  + 二进制正数所有位取反 = 所有位为1的二进制数
例如: 0000 0110   +     11111001         =    1111 1111
         所有位取反后 +     00000001         =  1 0000 0000 (高位溢出,舍弃)
            1111 1111   +    00000001         =  1 0000 0000  原来所有位都变成0,并且进位多出一位1,按照计算机运算规则
将会溢出舍弃。最后结果就是  0000 0000
所以:负数用“ 对应的正数所有位取反 再加 1” (补码)来表示的话,计算机就可以很方便快速得进行正负数运算了
这样产生了原码,反码、补码的概念。
正数没有反码,补码之分,就是它本身。反码和补码可以看做是为标记负数准备的。所有计算机中二进制数都是以 反码 的形式进行
存储和运算的。
用补码存储二进制数据,计算机可以快速方便进行正负数运算,但是对于负数:人只能通过符号位判别其是否是负数,却不能直观看出其数值大小
所以需要将负数转换成反码,再转换成原码。


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马