文章目录

  • 基础概念
    • 原码
    • 反码
    • 补码
  • 三种编码方式存在的原因

基础概念

  • 数据在计算机内部是以补码的形式存储
  • 数据分为有符号数和无符号数
    • 无符号数为正数,有符号数为负数,计算机内部是以补码的形式存储的
    • 正数的首位地址为0,其原码是由十进制数转换为二进制数
    • 负数的首位地址为1,其原码是由十进制数转换为二进制数,然后将首位地址改为1
  • 对于一个数,计算机要使用一定的编码方式进行存储,原码、反码、补码是机器存储一个具体数字的编码方式,原码、反码、补码是计算机原理的术语。说白了就是为了理解计算机使用二进制进行运算的原理。对于C/C++来说,是和数据类型有关的

原码

原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值

正数: 10 的原码 --> 0000 0000 0000 0000 0000 0000 0000 1010
负数:-10 的原码 --> 1000 0000 0000 0000 0000 0000 0000 1010

注意: 二进制位的首位标识该二进制数是一个正数还是负数,正数为0,负数为1

反码

  • 正数的反码 == 原码
  • 负数的反码是在其原码的基础上,符号位(首位)不变,其余各个位取反
正数: 10 的原码 --> 0000 0000 0000 0000 0000 0000 0000 1010
负数:-10 的原码 --> 1000 0000 0000 0000 0000 0000 0000 1010正数: 10 的反码 --> 0000 0000 0000 0000 0000 0000 0000 1010
负数:-10 的反码 --> 1111 1111 1111 1111 1111 1111 1111 0101

补码

  • 正数的补码 == 原码
  • 负数的补码是在其反码的基础上加1
正数: 10 的原码 --> 0000 0000 0000 0000 0000 0000 0000 1010
负数:-10 的原码 --> 1000 0000 0000 0000 0000 0000 0000 1010正数: 10 的反码 --> 0000 0000 0000 0000 0000 0000 0000 1010
负数:-10 的反码 --> 1111 1111 1111 1111 1111 1111 1111 0101正数: 10 的补码 --> 0000 0000 0000 0000 0000 0000 0000 1010
负数:-10 的补码 --> 1111 1111 1111 1111 1111 1111 1111 0110

三种编码方式存在的原因

计算机只会做加法计算

当两个正数之间使用原码进行运算就可以解决

// 由于计算机只会做加法运算,减法运算在计算机的表现形式为
10 + 1使用原码进行计算如下:
10 转成原码 --> 0000 0000 0000 0000 0000 0000 0000 1010
1  转成原码 --> 0000 0000 0000 0000 0000 0000 0000 0001
两者相加    --> 0000 0000 0000 0000 0000 0000 0000 1011          // 该原码转成十进制为 11

当正数和负数使用原码运算的时候就会出现问题

// 由于计算机只会做加法运算,减法运算在计算机的表现形式为
10 - 1 == 10 + (-1)      // 后者为计算机的表现形式使用原码进行计算如下:
10 转成原码 --> 0000 0000 0000 0000 0000 0000 0000 1010
-1 转成原码 --> 1000 0000 0000 0000 0000 0000 0000 0001
两张相加    --> 1000 0000 0000 0000 0000 0000 0000 1011          // 该原码转成十进制为 -11

因为正数和负数之间使用原码运算会出现问题,为了解决这个问题,反码就出现了

// 使用反码进行计算
10 - 1 == 10 + (-1)      // 后者为计算机的表现形式使用原码进行计算如下:
10 转成原码 --> 0000 0000 0000 0000 0000 0000 0000 1010 --> 转成反码 --> 0000 0000 0000 0000 0000 0000 0000 1010
-1 转成原码 --> 1000 0000 0000 0000 0000 0000 0000 0001 --> 转成反码 --> 1111 1111 1111 1111 1111 1111 1111 1110
10 转成反码   --> 0000 0000 0000 0000 0000 0000 0000 1010
-1 转成反码   --> 1111 1111 1111 1111 1111 1111 1111 1110
两者反码相加 --> 1 0000 0000 0000 0000 0000 0000 0000 1000 // 左侧超出的部分会被自动去掉,该原码转成十进制为 8注意:反码在进行正数与负数之间的运算所得的值会相差1

由于反码在进行正数与负数之间的运算所得的值会相差1,为了解决这个问题,补码就出现了

10 转成补码   --> 0000 0000 0000 0000 0000 0000 0000 1010
-1 转成补码   --> 1111 1111 1111 1111 1111 1111 1111 1111
两者补码相加 --> 1 0000 0000 0000 0000 0000 0000 0000 1001 // 左侧超出的部分会被自动去掉,该原码转成十进制为 9

原码、反码、补码概念及转换相关推荐

  1. 【计算机组成原理】原码 反码 补码 移码的转换

    原码 反码 补码 移码的转换 这三种机器码都是二进制数据的表现形式,可以表现正数和负数. 原码是可以直接表现出数据的正负和大小. 正数的原码.反码和补码都是相同的. 反码用于原码和补码的转换的功能. ...

  2. 原码反码补码之间运算转换

    1. 正数的原码=反码=补码 2. 负数的反码=在其原码的基础上, 符号位不变,其余各个位取反 负数的补码=在反码的基础上+1 负数的补码=在原码的基础上, 符号位不变, 其余各位取反, 最后末位+ ...

  3. 051_原码反码补码概念

    1. 反码的范围 1.1. 反码表示法规定: 正数的反码与其原码相同.负数的反码是对其原码逐位取反, 但符号位除外. 1.2. 在规定中, 8位二进制码能表示的反码范围是-127~127. 1.3. ...

  4. 原码反码补码以及左移右移无符号左移右移。

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

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

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

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

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

  7. 数制和码制(数制的转换的方法,BCD码<8421,2421,5421,余三码>,格雷码,原码,反码,补码,定点数和浮点数)

    目录 1.数制的转换 1)二,八,十六进制进制转十进制 加权系数求和法 2)十进制转二,八,十六进制 除基取余法(短除法) 减权定位法 3)二,八,十六进制的相互转换 2.BCD码 3.格雷码 4.原 ...

  8. day017:Java进制转换、原码反码补码、位运算、位移运算符

    一.进制介绍: 1.进制:指进位制,表示某一位置上的数,运算时是逢X进一. 十进制就是逢十进一,二进制就是逢二进一,八进制就是逢八进一. 2.Java中默认的数值都是十进制,如果要输入其他进制,在数值 ...

  9. 原码反码补码的概念,以及原码反码的表示形式

    本文主要讲解计算机的原码, 反码和补码.的概念,以及原码反码的表示形式,以及原码反码补码之前如何相互转换,还有计算机中数字是怎么样存储的. 原码: 假设机器字长为n,原码(自然二进制码)是一种计算机中 ...

  10. 原码 反码 补码 之间在小数正数间的转换

    原码 反码 补码 之间在小数正数间的转换 基本转换 对于正数 原码等于反码等于补码(小数也一样) 对于负数 原码除了符号位取反即反码 反码基础之上+1即补码 但是在遇到某些题时候还是会混淆,比如三者在 ...

最新文章

  1. pjax 历史管理 jQuery.History.js
  2. Memcached 客户端使用
  3. 【LeetCode】130.被围绕的区域
  4. CVPR 2019 | 基于可解释性以及细粒度的可视化解释卷积神经网络
  5. 计算机基础知识PDF文档,计算机基础知识(范文).pdf
  6. Keepalived实战(3)
  7. 23种Python设计模式之建造者模式详解
  8. matlab如何实现连续函数傅里叶变换和反变换(注:其实是由符号法创建的函数)
  9. 趣味小游戏——井字棋
  10. Web前端知识点总结(持续更新中...)
  11. 【立创EDA开源推荐】10期基于PCB彩印教程(水转印)
  12. Java基础视频教程(2020年最新)
  13. macos复制粘贴快捷键 快速_MacOS中复制和粘贴快捷键说明,及常见的各种快捷键整理大全...
  14. 计算机网络覆盖的地理范围分类,计算机网络按地理范围可分为什么
  15. oracle apex global,Oracle Apex 实用笔记系列 1 - Oracle Apex 调试技巧
  16. uva 10859 放置街灯树形dp
  17. python爬虫基础Ⅱ——Ajax数据爬取、带参请求:QQ音乐歌单、QQ音乐评论
  18. TIA博途V17中如何创建和使用VoT应用程序_Web功能
  19. 史上最小 x86 Linux 模拟器「GitHub 热点速览 v.22.50」
  20. 【蓝桥杯练习】100的阶乘有多少个约数?

热门文章

  1. oracle网页怎么翻译成中文,sql语句翻译成中文小工具
  2. 竞彩足球混合过关赔率API调用示例代码2020版
  3. 密码算法测试向量——HMAC-SM3
  4. 何谓三十而立 四十不惑 五十知天命 六十知耳顺?
  5. Rapid IO接口测试工装研究
  6. 基于协同过滤的图书推荐系统(python+MySQL+Django)
  7. 华云大咖说 | 安超DCM运维场景解决方案
  8. 获取蓝奏网盘无密码下载链接分析思路
  9. 【重新定义matlab强大系列三】MATLAB清洗离群数据(查找、填充或删除离群值)
  10. 利用USGS网站下载Landsat系列影像(个人总结的小技巧,适用新手小白)