有符号数和无符号数详解(2)补码详解

  • 1. 为什么需要补码
    • 1.1 背景
  • 2 补码的思想
    • 2.1 我们希望只设计加法运算器,不用减法运算器。
    • 2.2 现在问题是:怎么表示-1呢?
  • 3. 补码
    • 3.1 补码的优点
    • 3.2 例子:
  • 4. 补码的本质:
  • 参考

有符号数和无符号数详解
https://blog.csdn.net/lqy971966/article/details/106033332

1. 为什么需要补码

大多数计算机对整数使用二进制补码编码表示!!!

1.1 背景

(只设计加法运算器)

在计算机内,整数的长度是确定的,在字长为32位的计算机中,整数的长度就是32个二进制,这其中还包括了符号位(0表示正,1表示负)。
这里面我们为了方便描述,就假设机器字长为8位。

例如,十进制整数 19,二进制真值表示为 10011,其原码表示为 0001 0011。
十进制整数-19,二进制真值表示为-10111,原码表示为 1001 0011。

简而言之,源码就是最高位为符号位,其他位表示该数的绝对值
如果计算机内部采用原码表示数,那么在进行加法和减法运算的时候,最终都转化为两个绝对值的加运算和减运算,
因此,在设计计算器的时候就既需要设计加法运算器,又要设计减法运算器(代价有点大,是否可以就用一种类型的运算器呢?
其实大多数人都喜欢做加法运算,不太喜欢用减法运算)。

2 补码的思想

(从-1的由来说起)

2.1 我们希望只设计加法运算器,不用减法运算器。

我们希望找到一种方案,采用这种方案做加运算 1 + ( -1 )

用 0000 0000表示0是很自然的想法,用 0000 0001到 0111 1111表示1到127的正数,也是自然的想法

2.2 现在问题是:怎么表示-1呢?

我们做一次逆向思维,0000 0001加上什么样的二进制数可以得到0000 0000?
即:从右向左思考,加数的最右边的最低位必须是1
即:0000 0001 + (1111 1111)= 1 0000 0000
无论结果最后是多少,都只保留8位,多余的位会被丢弃。因此,我们可以将 1111 1111来表示-1
下面就是采用一种方式来合理的将-1怎么变成 1111 1111这种形式。

3. 补码

(解决了只设计加法运算器,不设计减法运算器)

带符号整数有原码、反码、补码等几种编码方式。
正整数的原码、反码和补码都一样
负数的反码是对原码的除符号位外的其他位进行取反后的结果
而补码是先求原码的反码,然后在反码的末尾位加1后得到结果,即补码是反码+1

3.1 补码的优点

它的便利体现在,所有的加法运算可以使用同一种电路完成。

3.2 例子:

以-8作为例子。
假定有两种表示方法。一种是直觉表示法,即10001000;另一种是-8补码表示法,即 1111 1000
随便写一个计算式,16 + (-8) = ?
16的二进制表示是 00010000,所以用直觉表示法,加法就要写成:
 00010000
+10001000
---------
 10011000
可以看到,如果按照正常的加法规则,就会得到10011000的结果,转成十进制就是-24。显然,这是错误的答案。
也就是说,在这种情况下,正常的加法规则不适用于正数与负数的加法。
因此必须制定两套运算规则,一套用于正数加正数,还有一套用于正数加负数。
从电路上说,就是必须为加法运算做两种电路。

现在,再来看 8 的补码表示法。
 00010000
+11111000
---------
100001000
可以看到,按照正常的加法规则,得到的结果是100001000。
注意,这是一个9位的二进制数。我们已经假定这是一台8位机,因此最高的第9位是一个溢出位,会被自动舍去。
所以,结果就变成了00001000,转成十进制正好是8,也就是16 + (-8) 的正确答案。
展到整个整数集,从而用一套电路就可以实现全部整数的加法。

4. 补码的本质:

要将正数转成对应的负数,其实只要用0减去这个数就可以了。
比如,-8其实就是0-8。
已知8的二进制是00001000,-8就可以用下面的式子求出:
 00000000
-00001000
---------
11111000
0不够借,最高位借1
补码的两个转换步骤就是这么来的。

参考

https://blog.csdn.net/m0_37955444/article/details/79848485

有符号数和无符号数详解(2)补码详解相关推荐

  1. 有符号数和无符号数详解

    有符号数和无符号数详解 1. 通过例子看问题 2. 有符号数和无符号数 2.1 什么是无符号数 ? 2.2 什么是有符号数 ? 2.3 有符号数和无符号数的区别 3. 原码.反码.补码 3.1 背景 ...

  2. 有符号数与无符号数比较-详解

    正如我们所知道的,编程语句都有很多的基本数据类型,如char,inf,float等等,而在C和C++中还有一个特殊的类型就是无符号数,它由unsigned修饰,如unsigned int等.大家有没想 ...

  3. 【考研计组】有符号数与无符号数之间的转换

    楼主有话要说: 在复习<计算机组成原理>时,遇到了有符号数与无符号数之间转换的问题,为了应对这类问题,楼主仔细查阅资料再结合做题总结出一些心得,内容如下(如果有新的总结,会反复修改): 注 ...

  4. java中有符号数和无符号数,C语言中无符号数和有符号数之间的运算

    C语言中有符号数和无符号数进行运算(包括逻辑运算和算术运算)默认会将有符号数看成无符号数进行运算,其中算术运算默认返回无符号数,逻辑运算当然是返回0或1了. unsigned int和int进行运算 ...

  5. 理解有符号数和无符号数的区别

    理解有符号数和无符号数 回头看上一节,我们所讲的数都是正数.同样是年纪和工资,前者不需要有负值,但后者可能需要--至少所有的老板都这样认为. 那么,负数在计算机中如何表示呢? 这一点,你可能听过两种不 ...

  6. c语言中的无符号字节,C语言之有符号数和无符号数

    我们知道,在C语言中存在无符号数和有符号数(一些高级语言如Java里面是没有无符号数的),但是对于计算机而言,其本身并不区别有符号数和无符号数,因为在计算机里面都是0或者1,但是在我们的实际使用中有时 ...

  7. C\C++不经意间留下的知识空白------有符号数和无符号数

    C和C++ C和C++应该是大多数工科生最先接触的两门语言,个人感觉这两门还是挺难的.今天在看面试题时,看到有符号数和无符号数时竟然懵了,这基础是有多不扎实啊! 有符号数和无符号数 对于浮点数来说都是 ...

  8. 各种类型sizeof大小及C++有符号数与无符号数进行比较

    不同类型sizeof相关: class A {}; class B { char m_data;}; class C {char m_data[100]; }; class D {char* m_da ...

  9. 11-有符号数和无符号数

    1. 有符号数和无符号数 无符号数,因为没有符号位,所以只能表示一个正数. 有符号数,因为存在符号位,符号位如果是0的话,代表这是一个正数,符号位如果是1的话,代表这个数是一个负数. 我们可以用db伪 ...

最新文章

  1. 【Android 高性能音频】AAudio 音频流 缓冲区 简介 ( AAudio 音频流内部缓冲区 | 缓冲区帧容量 | 缓冲区帧大小 | 音频数据读写缓冲区 )
  2. 中国SaaS死或生之三:SaaS SCM能否上演绝地求生?
  3. c fread 快读 详解_奔驰ACC(自适应巡航系统)详解
  4. mysql php 空格函数_MySQL_mysql 强大的trim() 函数,mysql中的去除左空格函数: LTRI - phpStudy...
  5. gmm中隐变量是什么的_隐变量是什么?
  6. MATLAB的7种滤波方法(重制版)
  7. 倍福plc的型号_倍福模块选型
  8. python数据分析练手小项目-汽车销售偷漏纳税人识别
  9. 新浪20年:独行侠的影响力之路
  10. css背景图片和背景颜色一起显示
  11. arxiv数据_使用neo4j第1部分分析arxiv数据
  12. java sql2005驱动_sqljdbc.jar下载-sqljdbc.jar 2005下载官方版-jdbc连接数据库mssql驱动西西软件下载...
  13. Python编辑器UliPad安装
  14. 纯翻译 GMSL2-CSI2 MAX9295和MAX9296配对通用过程 编程指南
  15. 马其顿驱动电源项目调光LED闪烁原因
  16. 【企业网盘】公有云和私有云的9大差异 | 燕麦企业云盘(OATOS企业网盘)
  17. js 页面跳转两种方式(原页面跳转,打开新标签页)
  18. 数字孪生与3D可视化
  19. 5.8 前端开发日报
  20. java用模板生成word(docx)文档(含动态表格)

热门文章

  1. 对数线性模型(Logistic回归算法)
  2. 路由器WAN 口和 LAN 口
  3. 牙科诊所信息管理系统 : 一. 创建springboot 框架集成freemarker
  4. Cooki and Session
  5. php中使用$_ENV获取环境变量
  6. 写给女友的JS教程---之JS闭包
  7. Vue(二)vue 指令及用法举例
  8. 洛谷---数学---数论
  9. Java企业级开发框架(三):changelog——1.0.0-SNAPSHOT
  10. vue获取url地址中的参数