在大学的学习中,一开始自认为已经学会了反码与补码,但在看到多种表述之后,反而是越来越乱,疑惑越来越多,即使记住了之后又会混淆,今天又看到了一次,为了防止以后再次忘记,写这篇博客记录一下(记录过程依据《数字电子技术(第十版)》,中英文结合)
首先从最一般的意义上,分别说一下二进制的反码和补码:

1、反码 (1’s complement)

把所有的0变为1,所有的1变为0。
如:
10110010 Binary number
01001101 1’s complement

2、补码 (2’s complement)

在反码的最低有效位上加1。
补码 = 反码 + 1
另一种求补码的方法:

  1. 从右边的最低有效位开始,往左边写下它们实际的位,直到遇到第一个1(包括1)
  2. 左边剩下的位求反码

如:
1011 1000 Binary number
0100 1000 2’s complement

这是在不区分正负数的情况下泛泛而谈的,其侧重点在于反码与补码如何操作,但实际上反码和补码的作用是用在带符号数上面的,下面进入重点。

3、带符号数 Signed Number

3.1 符号位 The Sign Bit

带符号的二进制的最左边的那一位就是符号位,指出这个数为正数还是负数,0表示正数,1表示负数。
下面介绍几种表示带符号数的形式。

3.2 符号数值的形式 Sign-Magnitude Form

最左边的一位是符号位,剩余的位都是数值位。其实也就是一般的带符号数的形式,数值位对于正数和负数来说都是二进制源码(in true (uncomplemented) binary)。如十进制数 +25 使用符号数值形式表示成8位带符号二进制数为:

十进制数 -25 表示为:

他们之间的唯一区别就是符号位不同。

3.3 反码形式 1’s Complement Form

正数的反码形式:与符号数值形式相同;
负数的反码形式:相应正数的反码。也就是为相应正数的符号数值形式的每一位取反。

应当注意的是并不是带符号数的反码都是每一位取反。
反码和补码其实是为了解决正数和负数的加减法运算的,所以正数其实不用做什么改变,而负数改变形式后可以巧妙解决一些运算问题。比如减去某个数和加上这个数的补码是一样的,这就是为什么计算机在所有的算术运算中都使用补码来表示负整数。
理解了反码是带符号数的一种表示形式及其目的,大概就能理解为什么正数的反码是其本身,下面要说到的补码也是一样的道理。

举例:在反码表示形式中,
十进制数 25 表示为:
00011001
十进制数 -25 表示为:
11100110

3.4 补码形式 2’s Complement Form

正数的补码形式:与符号数值形式相同;
负数的补码形式:负数的反码加1。

举例:在补码表示形式中,
十进制数 25 表示为:
00011001
十进制数 -25 表示为:
11100111

3.5 总结

对于带符号数,
正数的反码和补码与原码相同;
负数的反码等于相应正数的反码,补码等于相应正数的补码。

但这样的说法是会让人产生疑惑的,因为既然正数的反码等于原码,且负数的反码等于相应正数的反码(即等于正数的原码),那正数负数的表示不就一样了。我也觉得这种说法很有歧义,但如果把第二个反码看成是一种广义上的操作,即把每一位取反,这样就没问题了,总之只要能理解就好,有时候反码就是真的“反”码,实实在在的操作。但为了避免这种困惑,倒不如表述得更清楚直接些:

对于带符号数,
正数的反码和补码与原码相同;
负数的反码等于相应正数的符号数值形式的各个位取反,补码等于反码加1。


如有不合理的地方,欢迎指正。

二进制数的反码和补码相关推荐

  1. 二进制数表示形式:原码、反码与补码

    文章目录 一.二进制数计算 (一)二进制四则运算 1.加法运算法则 2.减法运算法则 3.乘法运算法则 4.除法运算法则 (二)二进制逻辑运算 1."与"运算(AND) 2.&qu ...

  2. 8位二进制数的原码、反码、补码以及它能表示的范围

    ===================================================================================== 1.正数的反码和补码都与原码 ...

  3. 二进制数的 原码、反码、补码 详解

    文章目录 1 概述 1.1 存储单位 1.2 机器数和真值 1.3 数值图示 2 有符号数 2.1 思考:原码.反码 和 补码 1 概述 1.1 存储单位 在计算机中,数据都是通过 二进制数(0 和 ...

  4. 关于计算机中二进制原码,反码,补码的简要解释

    原码,补码,反码的概念 正数原码:正数的原码为取绝对值的数转二进制,5的原码为   00000000   00000000   00000000    00000101 负数原码:负数的原码为取绝对值 ...

  5. 6位有符号补码阵列乘法器_C/C++学习日记:原码、反码和补码

    一.什么是原码.反码和补码 我们知道,在计算机内部存储的带符号数都是以补码形式存储,用补码形式进行运算的.什么是一个数的补码?为什么要用补码?这要从数的原码.反码开始讲.我们以整型数为例,且假定字长为 ...

  6. 原码、反码、补码解析,保证一次搞懂

    符号数 二进制符号数,其格式为 为了区别书写表示的带符号的二进制数和数字系统中的带符号二进制数,通常将用' + ' ,' - ' 表示正负的的二进制数称为符号数的真值,而把符号和数值一起进行编码的二进 ...

  7. 原码一位乘法器设计_对原码、反码和补码的加深理解

    我们知道计算机语言可以简单概括为三类,分别是机器语言.汇编语言和高级语言.机器语言是由二进制组成的编码,由无数个0和1组成.在二进制系统中,每个0或1就是一个位,而位是数据存储的最小单位,可称之为比特 ...

  8. 计算机组成原理1--原码、反码、补码、移码之间的关系

    普遍地说,特定的汇编语言和特定的机器语言指令集是一 一对应的不同平台之间不可直接移植 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放符号, 正 ...

  9. JavaSE教程-03深入探究原码,反码,补码-扩展

    1.原码,反码,补码的基础概念和计算方法 在搞清楚为什么计算机要使用补码之前,我们先搞清楚一个基本知识点,就是原码,反码,补码的计算方式. 对于一个数,计算机要使用一定的编码方式进行存储,原码,反码, ...

  10. 这样给学妹讲原码、反码、补码,帮她彻底解决困扰了三天的问题

    前言 补码是给机器看的,原码是给人看的,反码是二者的桥梁,原码反码补码虽然是简单问题,但确实很多人很长时间没有搞明白和深入思考,这篇把自己学习和理解过程记录下来,刚好一个学妹问到这个问题.本篇只讲原码 ...

最新文章

  1. Web应用中的轻量级消息队列
  2. ubuntu server 改变系统语言支持中文
  3. 深度学习将会变革NLP中的中文分词——TODO 待好好细看
  4. 深度网络的设计与可视化工具
  5. python微信接口发送消息_Python 微信公众号发送消息
  6. python之torchlight使用_为什么Python被誉为全世界最高效的编程语言?
  7. 将解决方案和项目放在同一目录中_借助卡第那思3D电子目录,巴鲁夫使用CAE数据扩展其产品目录...
  8. python假设有三个列表_python基础三(列表和元组)
  9. faster rcnn一些博客
  10. cluster oracle修改,Oracle 修改集群的资源属性(依赖关系)
  11. IteratorX 正式开源:超好用的 jdbc reader
  12. window下使用tail -f查看tomcat日志
  13. 网络新闻媒体舆情信息收集统计的三点解决方法
  14. QT5引用库出错即解决
  15. 【流体机械原理及设计00】
  16. 数字报刊平台php,现代快报多媒体数字报刊平台
  17. gl linux qt 库_Linux下Qt应用程序的发布(使用LDD命令查看所有依赖的库文件)
  18. 好玩】续航时间提升四倍? 颂拓拓野3 Peak评测
  19. 获取dom元素的方法
  20. Vue 新手学习笔记:vue-element-admin 之按钮级权限管控

热门文章

  1. Mac --显示隐藏文件
  2. 以太网未识别的网络win10_win10系统遇到以太网无法识别网络如何解决
  3. 【XXPHP源代码】把多个JS广告代码放到一个JS文件并调用
  4. 更多数学趣题:走迷宫
  5. oracle编程弹框函数,取窗口句柄的api函数
  6. 计算机系统:计算机系统的基本组成
  7. 上映4天,票房7.4亿的《海王》,用Python分析数据看大片!
  8. 随记(七):Jboss漏洞检测利用工具
  9. 好程序员大数据培训之Hadoop常见问题
  10. 关闭Windows Defender工具