数字在机器中都用二进制来进行存储,有符号数则有原码、反码和补码三种表示方式
这三种表示方式里,最高位都代表的是符号位,1代表负数,0代表正数

1.原码

一个数的原码就是该数直接转化成二进制得到的数字,第一位是符号位

+8的原码:0000 1000
-8的原码:1000 1000

2.反码

正数的反码是自己本身

+8的原码:0000 1000
+8的反码:0000 1000

负数反码就是原码除了符号位不动,其他所有位按位取反

-8的原码:1000 1000
-8的反码:1111 0111

3.补码

正数的补码是自己本身

+8的原码:0000 1000
+8的反码:0000 1000
+8的补码:0000 1000

负数的补码是反码加一得到的(运算时包括符号位)

-8的原码:1000 1000
-8的反码:1111 0111
-8的补码:1111 1000

正数的原反补码都是相等的,负数的原反补码是相互转换得到的

4.补码存在的意义

在机器中,数值一律用补码来表示和存储。

使用补码的原因:

  1. 使用补码可以将符号位和数值域统一处理
  2. 两个数字之间进行加减法运算时是将数字拿到CPU中进行计算的,而CPU只有加法器,要将减法转换成加法,所以可以利用补码使加减法统一操作

举个例子

计算 8 - 5
因为CPU只有加法器所以要将 8 - 5 转换成 8 + (- 5) 来计算
(+8)
8的原码:0000 1000
8的反码:0000 1000
8的补码:0000 1000
(-5)
-5的原码:1000 0101
-5的反码:1111 1010
-5的补码:1111 1011
8 - 5 = 8+(-5)
 0000 1000
+1111 1011
-----------------
  0000 0011
0000 0011的符号位是0,则表示正数,原反补码都相同,转化成十进制就是3

代码测试

int main()
{int i = 8;int j = -5;int m = i + j;printf("%d\n", m);return 0;
}

结果得到

我们利用调试看一下内存中存放的数据
首先查看 i 的地址里存放的数据

看到他在内存中存的是 08(这里是16进制)转换成二进制就是 0000 1000( 8 的补码)

之后我们看一下 j 的地址里存放的数据

这里存的是 fb 转化成二进制就是 1111 1011(这里就是 -5 的补码)

所以数据在机器中以补码形式表示和储存,补码的出现也更加便于计算

原码、反码、补码的转换相关推荐

  1. Debug和release版本区别 原码反码补码的转换及存储

    #define _CRT_SECURE_NO_WARNINGS 1  //Debug和release版本区别(VS2019版) //例子 #include<stdio.h> //int m ...

  2. 【实验作业】微处理器原理与应用 CPUHomework2.1【二进制 原码 反码 补码 数制转换 典型例题】

    一.选择题 1.一个四位二进制补码的表示范围是(B) A.0-15 B.-8-7 C.-7-7 D.-7-8 2.十进制数- 48 用补码表示为(B) A.10110000 B.11010000 C. ...

  3. 原码 反码 补码的相互转换

    原码 反码 补码的相互转换 原码 反码 补码的转换 还是比较 简单基础的问题.之前学习java的时候就学过,后来忘记了,忘记了!!!,后来学了位移运算符,左移 右移 无符号右移 之后就由有点儿懵了. ...

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

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

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

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

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

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

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

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

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

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

  9. Java进制转换、原码反码补码

    一.负数的表示 最高位(最左侧的位)是用来表示正负的.0代表的整数,1代表负数.最高位称为符号位. 0b0000 1000 所表示的数字是 8 0b1000 1000 所表示的数字是 -8 二.原码反 ...

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

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

最新文章

  1. 用户管理之用户的查询获取
  2. C#调用系统默认打印机打印文字和图片
  3. 网站SEO优化、IIS日志分析工具 IISLogViewer V2.0 发布
  4. boost::polygon模块实现自定义polygon相关的测试程序
  5. TFBOY 养成记 一些比较好多文章。
  6. JS笔记:检测客户端(引擎、浏览器、平台、操作系统)
  7. 在云服务器搭建WordPress博客(六)发布和管理文章
  8. 会议交流 | 2021年全国知识图谱与语义计算大会(CCKS 2021)征稿通知
  9. 大数据时代科研不能再两头花钱
  10. SVS为某大学打造无纸化会议室
  11. multisim的汉化
  12. Android 多语言切换
  13. Win11如何增强麦克风?Win11增强麦克风的设置
  14. 数据库之SQL更新语句中update set from用法
  15. 上海最新住房贷款(含公积金贷款,商业贷款,组合贷款)
  16. 计算机科学与技术专业就业方向及前景如何?
  17. JavaScript进阶(6)-全选练习
  18. 论文阅读06——《CaEGCN: Cross-Attention Fusion based Enhanced Graph Convolutional Network for Clustering》
  19. git tag怎么使用_这才是真正的 Git:Git 内部原理揭秘!
  20. python中numpy-choice函数

热门文章

  1. [Store:280040]An invalid record was found in the store: Code=30
  2. Photoshop巧为女友添加五彩眼影!
  3. GoogLeNet系列论文
  4. 为什么 LeetCode(力扣)「执行代码」正确,提交代码出错?
  5. fedora Chrome出现adobe flash is out of date的解决方法
  6. tv端h5_H5展现接口 - 阿里TV开放平台文档 - php中文网手册
  7. java list对象排序_Java 对象集合List排序的5种方式
  8. word文件上的电子签章的法律效力如何保证?
  9. 利用计算机录音先编码线采样,2010-2011(2)计算机应用基础期末理论复习题
  10. 基于python3 pyppeteer的漫画爬虫及下载项目PiaoManga