【C语言】【计算机组成原理】进制转换和原码、反码、补码

news2025/4/4 15:51:10

目录

一、进制转换

(1)数字进制的4个概念

(2)x进制转换成十进制

(3)十进制转换成x进制(除x取余法)

(4)二进制与八进制的相互转换

(5)二进制与十六进制的相互转换

二、原码、反码、补码

(1)机器数和真值

(2)原码、反码、补码的转换关系

(3)为什么要有反码

(4)为什么要有补码

(5)总结


一、进制转换

(1)数字进制的4个概念

        以10进制数“1234”为例。

  • 数码:每一位上的数,如例子中的1、2、3、4。
  • 位数:数码在这个数中的位置。从右向左以0开始递增1,如例子中的数码4的位数为0、数码3的位数为1、数码2的位数为2、数码1的位数为3。
  • 基数:每一位数码能表示的数字个数。如例子为10进制数,一位数码能表示0~9的数字,一共10个数,因此10进制数的基数为10。以此类推,2进制基数为2、8进制基数为8、16进制基数为16。
  • 位权:在某一位上的1表示的值,位权 = 基数^位数。如例子中,数码1的位权为10^3、数码2的位权为10^2。

(2)x进制转换成十进制

       进制只是一个数的不同表示方法。 x进制的每一位数码值的范围是0~x-1,能表示x个数。因此,2进制数只有数字0和1、8进制数只有数字0~7……,而在16进制数中,为了能在一位上表示两位数10~15,用字母A~F(大小写都可)代替之。

        在计算机中,八进制数通常以0开头,十六进制数通常以0x(大小写都可)开头。

        x进制数的十进制值 = 每一位的(数码 x 位权)之和。

        举例:

        ① 二进制 1011 = 1 x 2^0 + 1 x 2^1 + 0 x 2^2 + 1 x 2^3 = 1 + 2 + 0 + 8 = 11。

        ② 八进制 1507 = 7 x 8^0 + 0 x 8^1 + 5 x 8^2 + 1 x 8^3 = 7 + 0 + 320 + 512 = 839。

        ③ 十六进制 7E = 14 x 16^0 + 7 x 16^1 = 14 + 112 = 126。

(3)十进制转换成x进制(除x取余法)

       对十进制数除x取余(从下到上),直到被除数为0。

        例如:

        ① 十进制11转二进制(除2取余法):

        ② 十进制839转八进制(除8取余法):

        ③ 十进制126转十六进制(除16取余法):

(4)二进制与八进制的相互转换

        可以用10进制数为中介,2进制(互相转换)10进制(互相转换)8进制,从低到高每3位2进制数对应1位八进制数。

        举例:2进制数01’101’011转8进制数

        (二进制)011 >> (十进制)3 >> (八进制)3 

        (二进制)101 >> (十进制)5 >> (八进制)5

        (二进制)001 >> (十进制)1 >> (八进制)1

        结果:0153

(5)二进制与十六进制的相互转换

         可以用10进制数为中介,2进制(互相转换)10进制(互相转换)16进制,从低到高每4位2进制数对应1位八进制数。

        举例:2进制数0110’1011转16进制数

        (二进制)1011 >> (十进制)11 >> (十六进制)b

        (二进制)0110 >> (十进制)6 >> (十六进制)6

        结果:0x6b

二、原码、反码、补码

(1)机器数和真值

        机器数就是一个数在计算机中的表现形式,这个形式是符号数字化的二进制形式,其最高位是符号位,0表示正数,1表示负数。真值就是一个数真实的值。例如机器数(1)1011,它的真值为-11,而不是27。下面讲的原码、反码、补码都是机器数。

(2)原码、反码、补码的转换关系

        正数的三码都是相同的,负数的三码才是不同的,因此之后说的转换讨论的是负数。三码的转换关系用下面的图来表示:

        可以看到原码和补码的相互转换都是取反加1。因此,在电路设计时只要设计出取反加1,就能实现原码转补码和补码转原码了。

        举一个例子:

        真值:-1

        原码:1000 0001

        反码:1111 1110(原码的数值位取反,符号位不变)

        补码:1111 1111(反码的数值位加1,符号位不变)

(3)为什么要有反码

        原码是人脑最能理解的机器码,那为什么还要有反码,甚至补码呢?这一切都是为了在计算机中实现更简单高效的运算。

        第一:我们希望电路更简单,让CPU的运算器中只有加法器,就能实现加、减两种基础运算。因此,可以将减法运算转换为加法运算,如:2-1 = 2 + (-1)。

        第二:计算机不能区分符号和数值,如果想区分会加大电路的复杂性,因此我们需要一个不区分符号和数值,就能将符号位与数值位统一参与运算的编码形式。

        再来看看原码是否能正确实现符号位与数值位统一参与运算:

        1 + 1 = [0000 0001]原 + [0000 0001]原 = [0000 0010]原 = 2

        当操作数都为正数,正确。

        1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [1000 0010]原 = -2

        这个结果显然是不正确的,当有负数参与运算时,原码不能得到正确的结果。

        然后再来看看反码:

        1 - 1 = 1 + (-1) = [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0

        -0就是0,结果似乎正确。但毋庸置疑的是,反码能处理有负数的运算,在下面的举例中更能证实这一点,反码计算得到的错误结果与正确结果的比较是非常有规律的。

(4)为什么要有补码

        再来看看下面的几个例子:

        2-1 = 2+(-1) = [0000 0010]原 + [1000 0001]原 = [0000 0010]反 + [1111 1110]反 = [0000 0000]反 = +0,比正确结果1差1。

        6-2 = 6+(-2) = [0000 0110]原 + [1000 0010]原 = [0000 0110]反 + [1111 1101]反 = [0000 0011]反 = 3,比正确结果4相差1。

        大家可以在试试其它的例子,会发现用反码计算出的结果都会比正确值少1,这是为什么呢?本质原因就是反码的0有-0和+0两种,因此在计算的时候会把0算两次。

        比如2+(-1)可以看作给(-1)加个2,那么它每次增加1经历:-1 >> -0 >> +0,最后得到+0;比如6+(-2)可以看作给(-2)加个6,那么它每次增加1经历:-2 >> -1 >> -0 >> +0 >> 1 >> 2 >> 3,最后得到3。

        因此,科学家们最终发明了补码,它将-0和+0统一为[0000 0000]补,表示0(解决了反码运算错误的问题);并将补码中的[1000 0000]补,表示-128,注意-128没有原码和反码,原码和反码比补码少一个数字-128。

(5)总结

        数据在计算机中都是以补码形式存放的。原因:

  • 实现了将加法和减法统一进行处理。
  • 实现了将符号位和数值位统一进行处理。
  • 原码和补码的相互转换,原理相同,不需要增加额外的硬件电路。

       

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1964096.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AI落地应用实战】DAMODEL深度学习平台部署+本地调用ChatGLM-6B解决方案

ChatGLM-6B是由清华大学和智谱AI开源的一款对话语言模型,基于 General Language Model (GLM)架构,具有 62亿参数。该模型凭借其强大的语言理解和生成能力、轻量级的参数量以及开源的特性,已经成为在学术界和工业界引起了广泛关注。 本篇将介…

成为 Spring Boot + Vue 图书作者的必备素养

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119@qq.com] 📱个人微信:15279484656 🌐个人导航网站:www.forff.top 💡座右铭:总有人要赢。为什么不能是我呢? 专栏导…

Python 使用 Detectron2 进行目标检测 (Detectron2, CenterNet2, Detic)

代码说明 代码主要是一个用来演示如何使用 Detectron2 进行目标检测的脚本。它可以从摄像头或视频文件中读取图像,并应用指定的配置文件进行目标检测。其中,Detectron2 结合了 CenterNet2 和 Detic 进行目标检测。 主要库介绍 Detectron2 Detect…

UMG文本控件(UTextBlock)超过边界区域以后显示省略号

测试版本:UE5.4.1 UMG文本控件超过边界区域以后显示省略号

基于springboot+vue+uniapp的校园快递平台小程序

开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…

【打家劫舍】python刷题记录

R3-递归篇。第100篇blog. 思路: 和爬楼梯有点相似,每次隔1格,2格,3格----(隔3格就亏了,所以还是类似爬楼梯问题,1格或者2格) class Solution:def rob(self, nums: List[int]) -> int:cur,pre0,0for nu…

科普文:Linux目录详解

在 Linux/Unix 操作系统中,一切都是文件,甚至目录也是文件,文件是文件,鼠标、键盘、打印机等设备也是文件。 这篇文章,我们将一起学习 Linux 中的目录结构及文件。 Linux 的文件类型 Linux系统中的文件系统&#xf…

图片太大怎么压缩变小?图片太大压缩变小的几个方法

图片太大怎么压缩变小?在当今数字化时代,图像的处理和分享已经成为日常工作和生活中不可或缺的一部分。然而,有时我们会遇到一个普遍的问题:图片文件太大,需要压缩以便于存储、传输或发布。为什么要压缩图片呢&#xf…

【PCB prepreg】PP 参数比选 四 <预浸料树脂流>

预浸料树脂在压力下加热时会熔化和流动。这通常被称为树脂流动。树脂的流动取决于压力和树脂使用的热量。树脂可以自由流动的时间有限。在成为流体一段时间后,树脂会变成凝胶。 预浸料树脂的流动性对层压操作至关重要,而层压条件会影响这种流动性。此外…

程序员修炼之路

成为一名优秀的程序员,需要广泛而深入地学习多个领域的知识。这些课程不仅帮助建立扎实的编程基础,还培养了问题解决、算法设计、系统思维等多方面的能力。以下是一些核心的必修课: 计算机基础 计算机组成原理:理解计算机的硬件组…

国内备受好评PostgreSQL数据库性能如何?

为什么国内很多数据库采用PostgreSQL数据库作为基础,再次开发自己的产品呢?不仅仅是因为PostgreSQL数据库开源免费、PostgreSQL 数据库的性能也是相当出色的,具有以下几个方面的特点: 1. 处理大规模数据: - 能够有效地管理和处…

外设购物平台

目 录 一、系统分析 二、系统设计 2.1 系统功能设计 2.2 数据库设计 三、系统实现 3.1 注册功能 3.2 登录功能 3.3 分页查询所有商品信息功能 3.4 分页条件(精确、模糊)查询商品信息功能 3.5 购物车功能 3.6 订单管理功能 四、项…

javafx的ListView代入项目的使用

目录 1. 创建一个可观察的列表,用于存储ListView中的数据,这里的User是包装了用户的相关信息。 2.通过本人id获取friendid,及好友的id,然后用集合接送,更方便直观一点。 3.用for遍历集合,逐个添加。 4.渲染器&…

css各种使用案例合集(二)

1、hover动画 场景1&#xff1a;要求有旋转、变色&#xff0c;有变化过程 场景结果&#xff1a; 代码示例&#xff1a; <div class"box"><div class"headUp"></div><div class"head"></div><div class"mo…

全面整理人工智能(AI)学习路线图及资源推荐

在人工智能&#xff08;AI&#xff09;飞速发展的今天&#xff0c;掌握AI技术已经成为了许多高校研究者和职场人士的必备技能。从深度学习到强化学习&#xff0c;从大模型训练到实际应用&#xff0c;AI技术的广度和深度不断拓展。作为一名AI学习者&#xff0c;面对浩瀚的知识海…

FPC焊接座子和FPC线的线序问题,弄个转接口

焊接fpc底座 可以发现&#xff0c;也可以焊接上&#xff0c;但在原理图中的顺序连接不同可能导致顺序完全相反 FPC线顺序也可能不同 所以还是弄个转换接口&#xff0c;可是临时测试使用

智能制造有哪些发展阶段?企业推进数字化制造容易走进什么误区?

随着智能制造的浪潮席卷全球&#xff0c;我们正目睹一场前所未有的工业变革。智能制造这一集精益生产、柔性制造、敏捷制造和云制造等先进范式于一体的全新制造模式&#xff0c;正在重塑制造业的未来。 本文将深入探讨智能制造的三个发展阶段&#xff1a;数字化制造、网络化制…

Studying-代码随想录训练营day49| 42. 接雨水、84.柱状图中最大的矩形

第49天&#xff0c;单调栈part02&#xff0c;两个很经典的例题&#xff0c;编程语言&#xff1a;C 目录 42. 接雨水 84.柱状图中最大的矩形 总结&#xff1a; 42. 接雨水 文档讲解&#xff1a;代码随想录接雨水 视频讲解&#xff1a;手撕接雨水 题目&#xff1a; 42. 接雨…

轻松上手Scikit-learn——评估模型性能(准确率、精确率、召回率、ROC和AUC)

轻松上手Scikit-learn——评估模型性能&#xff08;准确率、精确率、召回率、ROC和AUC&#xff09; 安装scikit——learn pip install -U scikit-learn常用模型性能评估指标 在开始介绍之前先规定几个表示&#xff1a; 模型预测正确的正样本&#xff0c;称为真正样本&#…

AI会带来新的就业岗位吗?

最近&#xff0c;百度的首席执行官Roy在世界人工智能大会&#xff08;WAIC&#xff09;上提出了一个观点。他表示&#xff0c;大家无需过于担心人工智能会导致大量失业&#xff0c;相反&#xff0c;人工智能会创造一批新的就业岗位。他特别提到了几个核心的典型代表&#xff0c…