可以直接从第三部分(计算机中数的存储和运算)开始看。

文章目录

  • 0x00 机器数和真值
  • 0x01 原码、反码和补码
  • 0x02 计算机中数的存储和运算
  • 0x03 实例运算
    • 实例一:
    • 实例二:

0x00 机器数和真值

首先了解机器数真值的概念.

  • 机器数:一个数在计算机中的二进制表示,计算机中机器数的最高位是符号位,正数符号位为0,负数符号位为1。机器数包含原码、反码和补码三种表示形式。
比如,十进制中的数 +3 ,计算机字长为8位
转换成二进制就是0000 0011。
如果是-3,就是 1000 0011。这里的 0000 0011 和 1000 0011 都是机器数。
  • 真值:一个机器数本身表示的值就是真值。
例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1

0x01 原码、反码和补码

  • 原码:原码表示法在数值前面增加了一位符号位(即最高位为符号位),正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。
  • 反码:正数的反码是其本身,负数的反码是在原码基础上符号位不变,其余位取反。
  • 补码:正数和0的补码就是该数本身。负数的补码则是将其对应正数按位取反再加1(反码+1)。

0x02 计算机中数的存储和运算

  • 补码系统的最大优点是可以在加法或减法处理中,不需因为数字的正负而使用不同的计算方式。只要一种加法电路就可以处理各种有号数加法,而且减法可以用一个数加上另一个数的补码来表示,因此只要有加法电路及补码电路即可完成各种有号数加法及减法,在电路设计上相当方便。
  • 另外,补码系统的0就只有一个表示方式,这和反码系统不同(在反码系统中,0有二种表示方式),因此在判断数字是否为0时,只要比较一次即可。
  • 计算机中的负数是用补码的形式存储和运算的。
  • 计算机中只有加法,没有减法。

1、为什么没有减法?
人类的减法运算涉及到符号位的处理,这对电路来说,是比较复杂的。

2、那么计算机中减法是怎么实现的呢?
补码系统下,可以通过把减法换成反码,然后通过加法器运算。

0x03 实例运算

实例一:

127 - 1实例

# 127 - 1
127原码:0111 1111
127反码:0111 1111
127补码:0111 1111
# 结论:正数原码、反码和补码是一样的。-1原码:1000 0001
-1反码:1111 1110
-1补码:1111 1111
# 结论:负数反码符号位不变,其余位取反,补码在反码基础上加一。#运算,最高位进位直接丢弃0 1 1 1   1 1 1 1
+   1 1 1 1   1 1 1 1
-----------------------0 1 1 1   1 1 1 0# 126原码、补码、反码:0111 1110
# correct!

实例二:

1 - 127实例

# 127 - 1可以换成1 + (-127)
1原码:0000 0001
1反码:0000 0001
1补码:0000 0001
# 结论:正数原码、反码和补码是一样的。-127原码:1111 1111
-127反码:1000 0000
-127补码:1000 0001
# 结论:负数反码符号位不变,其余位取反,补码在反码基础上加一。#运算,最高位进位直接丢弃0 0 0 0   0 0 0 1
+   1 0 0 0   0 0 0 1
-----------------------1 0 0 0   0 0 1 0# 1000 0010是一个补码
# 其反码是1000 0010 - 1 = 1000 0001
# 其原码是1111 1110 = -126
# correct!

附:部分8-bit补码系统的整数

0 1 1 1 1 1 1 1 = 127
0 0 0 0 0 0 1 0 = 2
0 0 0 0 0 0 0 1 = 1
0 0 0 0 0 0 0 0 = 0
1 1 1 1 1 1 1 1 = −1
1 1 1 1 1 1 1 0 = −2
1 0 0 0 0 0 0 1 = −127
1 0 0 0 0 0 0 0 = −128

为什么计算机中负数用补码表示相关推荐

  1. 计算机中负数和正数的二进制表示

    计算机中,数值的二进制表示有几个概念. 原码,补码和反码.计算机中,数值都是以补码的形式保存. 原码:就是十进制的数字转换为二进制在计算机中的表示,如正2,二进制表示为000 0010,(这里取8位显 ...

  2. 计算机中负数的二进制表达方法

    计算机中表达数值是用二进制编码表示的,但是正数的表示和负数是不一样的. 比如32为int整形数100的编码为00000000000000000000000001100100: 而-100的表示是什么呢 ...

  3. 计算机中负数除法取余问题分析与实现

    计算机中负数除法取余问题分析与实现 背景 问题说明 原理分析 参考资料 背景 项目中遇到一个奇怪的问题,定位bug半天,发现同样的负数取余操作,在不同编程语言中实现竟然不一致,我滴个天,惊呆了.于是, ...

  4. 原码、反码、补码,计算机中负数的表示

    原码:将一个整数,转换成二进制,就是其原码.如单字节的5的原码为:0000 0101:-5的原码为1000 0101.反码:正数的反码就是其原码:负数的反码是将原码中,除符号位以外,每一位取反.如单字 ...

  5. 负数在计算机中如何表示,计算机中负数为什么用补码表示?

    转载一篇文章,留下来学习,加深下印象. 问: 负数在计算机中如何表示? 举例来说,+8在计算机中表示为二进制的1000,那么-8怎么表示呢? 很容易想到,可以将一个二进制位(bit)专门规定为符号位, ...

  6. 负数在计算机中的存储——补码

    首先,负数要在计算机中正确存储,其对应变量必须声明为有符号数.有符号数的最高位为符号位:0代表正数,1代表负数:后面的位则为数值位. 现在来研究一个简单的负数-1在一个字节(8位)中的存储. 按照一般 ...

  7. 原码、补数、补码以及计算机中为什么用补码存储

    原码:最左侧一位表示符号,且0表示正数,1表示负数:二进制转换为十进制时,符号位只用于取正负号,不参与转化. 例如1个字节的二进制: 0000 0001表示十进制的1: 0000 1010表示十进制的 ...

  8. 计算机中负数取余和数学上的取余

    数学定义上的取余:(余数必须大于0) 如果a和d是两个自然数,d非零,可以证明存在两个唯一的整数 q 和 r,满足a=qd+r且0 ≤ r < d(其中q为商,r为余数). 举例: 5%3=3x ...

  9. 计算机中的机器码就是二进制数,高电单片机习题(答案)

    第四部分 单片机原理及接口技术 第一章 MCS一51系列单片机概述 练 习 题 一.判断题 ( )1.已知[X]原=10001111,则[X]反=11100000. ( )2.已知[X]原=11101 ...

最新文章

  1. Oracle 系统改变号SCN详解
  2. SAP标准工单入库时产生成本差异-求解进行时
  3. ApkTool反编译出错brut.common.brutexception及java.io.filenotfoundexception 之一
  4. JavaOne 2016 Essentials:7个您不容错过的事件和会话
  5. camera---(3)双camera 生态链
  6. [转帖]Windows7 结束更新 以及后期更新花费。
  7. 计算机网络第五次笔记
  8. 1953~2021年七次全国人口普查以及各省人口数量变化情况
  9. IIS的ISAPI接口
  10. 比例尺和分辨率的相关概念
  11. What is Drilldown configuration
  12. matlab泰勒展开样例,MATLAB绘图样例
  13. IP0_Verilog实现基于双线性插值算法的图像放大IP设计
  14. 煲耳机,看到一篇文章分享下
  15. jib插件的简单使用
  16. 腾讯携手中科院国家天文台落地FAST 用云计算探索星辰大海
  17. JSD-2204-酷莎商城(后端)-Day17,18
  18. 声网如何添加与配置项目
  19. mysql binlog笔记
  20. 一家之言:de_nuke全面分析

热门文章

  1. iconfont 图标转为字体_如何把你的图标转换成web字体
  2. Java后端实现弹框
  3. 关于利用Tushare构建自己的股票数据库
  4. 手游吃鸡公认最好的几款耳机
  5. Android仿微信底部菜单栏+今日头条顶部导航栏
  6. 移动端touchend事件不触发解决方案
  7. 借助百度云平台人脸识别sdk完成网页人脸识别登录demo
  8. 【Excel函数】Office365 函数之Mid 函数使用
  9. 一分钟看懂IoC 原理
  10. linux运维面试题:第二部分