写在前

作为一个非科班的it小白,对计算机的很多术语总是很懵逼,然后各种百度,各种博客查看,往往很多文章又是人云亦云,该篇文章主要讲解原码、反码、补码。通过记录各个‘码’的出现历史及原因,理解三者的关系,希望能够讲明白

**背景:**如何让计算机执行二进制的(+、-)运算,人脑基于常识(规则)可以识别(+、-)符号,然后运算出结果,那如何让计算机基于规则,运算出符合人们常识的结果呢

原码

一开始,人们约定在一个二进制数前用第一位(最高位)来表示符号,即1表示负,0表示正,这就是最初“原码”的概念(这就是概念)

号外:为啥叫32位操作系统:计算机可以一次处理2^32个数字(0、1)

# 以8位为例
0 0000001 => 0 0000001
-1 => 1 0000001

如何计算 1-1

0 0000001 + 1 0000001 = 1 0000010 (-2)

为啥是加号,人看着是减号运算。因为计算机的硬件结构中只有加法器,因此所有的运算均需转换为加法运算(二进制运算规则请自查)

在原码中0有+0和-0两种表示形式,存在二义性。

补码

为了避免在运算时,符号为单独处理,不知道哪个聪明大师想出了一个规则,该规则人们命名成了补码(这也是概念,理解了规则,也就理解了补码)
规则如下:
正数的补码和原码相同;负数的补码通过先把除符号位外其他各位取反,再在末位(最低位)加1得到

# 以8位为例
0 0000001 => 0 0000001
1 0000001 => 1 1111110 + 1 => 1 1111111
1 - 1 => 0 0000001 + 1 1111111 => 0 0000000 => 0(人认可的)
疑问:加法运算后,应该是9个数字 10 0000000,为啥是0 0000000。个人理解,我的计算机是8位操作系统,只能处理8位,多余的1,高位溢出(请知晓的大佬讲解一下)

聪明人想出补码的理论依据:
模:一个计算机运算的概念。一个计量单位称(或者理解为计算规则)

参考如下例子:

时钟是以十二进制进行计数循环的,即以12为模。在时钟上,时针加上(正拨)12的整数倍或减去(反拨)12的整数倍,时针的位置不变。
例如,从0点出发逆时针拨10格即减去10小时,也可看成从0点出发顺时针拨2格(加上2小时),即2点(0-10=-10=-10+12=2)。因此,在模12的前提下,-10可映射为+2。
由此可见,对于一个模数为12的循环系统来说,减10和加2的效果是一样的。所以,在以12为模的系统中,凡是减10的运算都可以用加2来代替,这样就把减法问题转化成加法问题了

同理,如果计算机为8位的处理系统,则当计数器计满8位也就是256个数后会产生溢出,又从头开始计数。显然,8位二进制数最大为(11111111=2^7 +…+20=28),即256。(个人理解,先取反,相当于钟表反转;再加1,相当于加二进制[0,1]的最大数字)

反码

通过对补码的了解,可以看出其实“反码”是“原码”向“补码”表示形式转变过程中的一个过渡形式。之所以当初会想到“反码”,是因为它太容易从电路上来实现了(仅需要取反就行了)。同时存在如下问题

1 => 0 0000001
-1=>1 0000001 => 1 1111110
0 0000001+1 1111110=1 1111111 = -0

移码

移码是一种比较特殊的二进制数表示形式。它的编码规则如下:
正数的符号位为1,负数的符号位为0;
真值部分与补码一样。(规则就是概念,可以理解为原码换算成补码后,再对符号位取反)

5的二进制移码(假设字长为8)为10000101 ,-5的二进制移码为01111011(它是对-5的补码符号取反的结果)1 与 1
|  原码|反码  |补码 | 移码|
|--|--|--|--|
| 0 0000001 |0 0000001  |0 0000001|1 0000001|
| 1 0000001 |1 1111110  |1 1111111|0 1111111|

以上参考编码教程,个人理解,如有理解或者描述错误,欢迎探讨

原码、反码、补码详述相关推荐

  1. 关于计算机中 原码, 反码, 补码 详解

    本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希 ...

  2. 原码, 反码, 补码, 移码 详解

    本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希 ...

  3. 关于 原码 反码 补码 位运算

    二进制 原码:最高位为符号位,0为正  1为负 正数的原码 反码 补码 都是相同的 反码:负数的反码为原码符号位不变 其它对应变化(1变0 0变1) 补码:等于 反码+1 3^-3 =? 运算过程 - ...

  4. 10.原码 反码 补码

    +7的原码:0000 0111 -7的原码:1000 0111   第一位0代表正数,1代表负数,第一位为符号位 +7的反码:0000 0111 正数反码和原码一样 -7的反码:1111 1000   ...

  5. java进制原码_Java 一一 进制、原码 反码 补码、移位操作

    进制 二进制 和 十进制 相互转换 十进制 和 十六进制 相互转换 原码,反码,补码 原码.反码.补码: 在计算机内, 有符号数有三种表示法: 原码, 反码, 补码. 所有的数据的运算都是采用 补码 ...

  6. 大端 小端 原码 反码 补码 及内存中的表现

    小端 和 大端 在内存中存储时,都是从内存的低地址往高地址存,即0x00000000 -> 0xffffffff 以汉字 "严"为例,Unicode码是4E25,需要两个字节 ...

  7. 原码 反码 补码 详解

    一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放 ...

  8. python二进制反码例题_python中的进制转换和原码,反码,补码

    python中的进制转换和原码,反码,补码 计算机文件大小单位 b = bit 位(比特) B = Byte 字节 1Byte = 8 bit #一个字节等于8位 可以简写成 1B = 8b 1KB ...

  9. 原码 反码 补码 详解

    本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希 ...

  10. 【原码, 反码, 补码的基础概念和计算方法】

    数值在计算机中是以补码的方式存储的,在探求为何计算机要使用补码之前, 让我们先了解原码, 反码和补码的概念. 原码就是符号位加上数字的二进制表示, 即用第一位表示符号, 其余位表示值. 反码的表示方法 ...

最新文章

  1. MongoDB 主从复制集搭建
  2. SQL Server 和 MySql 语法和关键字的区别
  3. 又到校招季,来说说面试和实习
  4. C#获取摄像头拍照显示图像
  5. 【渝粤教育】国家开放大学2018年春季 0025-21T数据结构 参考试题
  6. c语言编译器怎样退出全屏,BOOX 应用软件怎样退出全屏模式?
  7. php 年月日 中文,php Date()函数输出中文年月日时分秒_PHP教程
  8. MathType中公式不对齐怎么办
  9. ubuntu 下 apache2 查看 已加载的模块 命令
  10. android中一个应用程序启动另外一个应用程序,并传递数据。
  11. 分贝噪音测试软件文件存储,手机分贝噪音测试软件
  12. Linux驱动开发|PWM驱动
  13. c语言单片机的电子琴课程设计,基于单片机的电子琴的设计
  14. 深入探访支付宝双11十年路,技术凿穿焦虑与想象极限
  15. 已故女孩在微博“复生”追星,你的数据资产谁说了算?
  16. 我为什么还坚持做公众号?(二)
  17. 阿里云ECS服务器安装mysql8
  18. 计算机导论第五讲MOOC模拟答案,MOOC理念指导下的计算机导论课程_微课堂_设计与思考_朱淑鑫...
  19. android程序运行时总出现“Unfortunately,程序名 has stopped” 的问题
  20. python3 Requests+Sqlite+Pyquery断点下载小说爬虫

热门文章

  1. jquery ajax xml attribute,获得jQuery ajax和asp.net webmethod xml响应工作
  2. php mongo in 查询语句,PHP 怎么执行mongodb 的 $in 和$size查询
  3. 一个软件网络连接异常_你的电脑运转正常吗?这 10 款系统监控软件能告诉你答案...
  4. modprobe:用于向内核中加载模块或者从内核中移除模块。
  5. Numpy 之shape manipulation
  6. 【训练过程】2) Train the VAEs of domain A and domain B respectively(分别训练域A和域B的VAE)
  7. 中易广告联盟v9/黑色高端/模板 团队介绍网站
  8. CSS鼠标悬停隐藏展开简介特效
  9. linux 系统怎么安装vnc,在Linux系统中安装和使用VNC
  10. 柒上支付个人免签支付系统源码