原码、反码、补码及用途

news/2024/9/16 2:14:21 标签: 开发语言, 算法

一.原码、反码、补码

1.定义

原码:原码是最直观的表示方法,它直接用二进制数表示一个数,包括正负号。在原码中,最高位(最左边的位)是符号位,0 表示正数,1 表示负数。其余位表示数值本身。例如,十进制数 +5 的原码表示为0000 0101,而 -5 的原码表示为 1000 0101。

反码:反码主要用于表示负数。对于正数,其反码与其原码相同。对于负数,其反码是将原码除符号位外的所有位取反(0 变 1,1 变 0)。例如,十进制数-5的反码表示为1111 1010。

补码:补码是计算机中最常用的表示方法,用于进行二进制加法运算。对于正数,其补码与其原码相同。对于负数,其补码是其反码加 1。补码的一个重要特性是,任何数的补码加上该数本身,结果总是 0。例如,十进制数 -5 的补码表示为 1111 1011。

2.概念详解

原码(True Form)

概念:

原码是一种最简单的表示有符号数的方法。

使用最高位(最左边的一位)表示符号:0表示正数,1表示负数。

其余位表示数值的大小。

示例:

8位原码表示:

+5:00000101

-5:10000101

反码(Ones' Complement)

概念:

反码是通过对原码的数值部分逐位取反(0变1,1变0)得到的。

正数的反码和原码相同。

负数的反码是其原码除符号位外所有位取反。

示例:

8位反码表示:

+5:00000101

-5:11111010

补码(Two's Complement)

概念:

补码是反码加1得到的。

正数的补码和原码相同。

负数的补码是其反码加1。

示例:

8位补码表示:

+5:00000101

-5:11111011(反码为11111010,加1得到11111011)

3.补码运算示例

补码的使用可以简化计算机中的算术运算,因为加法和减法可以统一为加法运算。当进行减法运算时,可以将减数的补码与被减数相加,从而得到结果。

这里有一个简单的示例来说明补码运算:

假设我们要计算十进制数 5 - 3,转换为5加上-3的补码进行加法运算:

首先,将两个数转换为二进制:5 的二进制是 0101,-3 的补码是 1101。

然后,将5和-3的补码进行二进制加法运算:0101 + 1101 = 10010。

最后,去掉溢出位,结果转换为十进制就是2.

二.反码、补码是如何提升计算效率的

1.反码对运算效率的提升

简化电路设计:

使用反码可以使计算机在进行加法和减法运算时使用相同的逻辑电路,从而减少了硬件的复杂性和制造成本。因为减法可以通过对减数取反后进行加法运算来实现,这样计算机只需要设计一套加法电路即可。

减少逻辑电路的复杂度:

在使用反码的情况下,计算机在进行减法运算时,只需要对减数进行取反操作,然后再进行加法运算。这种方式避免了设计额外的减法电路,从而简化了电路设计和运算过程。

2.补码对运算效率的提升

符号位与数值位共同参与运算:

补码规定了一套统一的表示方法,使得符号位可以和数值位一起参与运算,不再需要区分符号位和数值位。这样,计算机在执行加法和减法运算时,可以直接按位进行,简化了运算过程。

避免了溢出问题:

在补码表示法中,溢出问题得到了有效的解决。当运算结果超出给定的位数范围时,补码通过将溢出的位丢弃,并自动调整结果的符号位,使得结果仍然能够正确地表示。这样可以保证在有限的位数范围内进行运算而不产生错误的结果。

唯一性:

补码保证了每个整数在计算机中的表示都是唯一的,避免了原码表示法中-0和+0同时存在的问题。这种唯一性对于计算机进行精确计算和比较操作非常重要,可以避免因为不同的表示方式导致的误判或错误结果。

简化硬件设计:

补码的使用使得计算机硬件设计更加简单。由于加法和减法运算都可以通过加法电路来实现,因此计算机只需要设计一种简单的加法电路就可以满足基本的运算需求。这种设计方式不仅降低了硬件成本,还提高了计算机的整体性能。

3.总结

反码和补码通过简化电路设计、减少逻辑电路的复杂度、使符号位与数值位共同参与运算以及避免溢出问题等方式,显著提升了计算机的运算效率。这些优势使得计算机能够更高效地执行加、减、乘、除等基本算术运算,从而满足各种复杂的应用需求。


http://www.niftyadmin.cn/n/5643320.html

相关文章

设计之道:ORM、DAO、Service与三层架构的规范探索

引言: 实际开发中,遵守一定的开发规范,不仅可以提高开发效率,还可以提高项目的后续维护性以及项目的扩展性;了解一下本博客的项目设计规范,对项目开发很有意义 一、ORM思想 ORM(Object-Relation…

库存盘点频出错?试试这款专业软件的库存分析报表工具

在企业的日常运营中,库存管理的实际操作直接影响到我们的工作效率和企业的整体盈利情况。库存不仅是企业的物资储备,更是我们每天工作中必须处理的关键环节。如果库存管理不到位,可能会导致产品积压、资金占用,甚至影响到销售和客…

leetcode:3174 清除数字

3174 清除数字 题目链接https://leetcode.cn/problems/clear-digits/ 题目描述 给你一个字符串 s 。 你的任务是重复以下操作删除 所有 数字字符: 删除 第一个数字字符 以及它左边 最近 的 非数字 字符。 请你返回删除所有数字字符以后剩下的字符串。 示例 1…

前端自查【知识点】(高概率)2024最新版

HTML 如何理解 HTML 语义化 ? 仅通过标签便能判断内容的类型,特别是区分标题、段落、图片和表格 增加代码可读性(让人更容易读懂)对SEO更加友好 (让搜索引擎更容易读懂) HTML有哪些内联元素和块状元素 ? 内联元素…

【leetcode详解】清除数字:栈思想解决字符串问题(思路详解)

实战总结 string的常用方法: pop_back, push_back使得可以直接像操作栈一样操作string类型 注意,上面两个方法只能对单个字符char操作但是‘ ’对 char 和 string 均适用 题面 思路详解: 不妨对比一下其他思路: 双指针&#…

《酒饮真经》第二部——劝酒十五式

在欢聚一堂的盛宴中,劝酒不仅是一门学问,更是一种情感的交流。以下是酱酒亮哥总结的几种新颖的劝酒策略,希望您在酒桌创造的氛围更加和谐,让大家感受到你的尊重与重视。 群英荟萃,共饮不拒 面对一群挚友,小…

深度学习——引言

一、机器学习的关键因素 1.1 数据 每个数据集由一 个个样本组成,大多情况下,数据遵循独立同分布。通常每个样本由一组特征属性组成。 好的数据集 { 数据样本多 正确的数据 ( g a r b a g e i n , g a r b a g e o u t ) 好的数据集 \begin{cases} 数据…

react的useRef作用是什么怎么使用

useRef 是 React 中的一个 Hook,它允许你在函数的整个生命周期内保持对某个值的“引用”不变。这个 Hook 特别适用于需要直接访问 DOM 元素或者在函数的多次渲染之间需要保持某些数据不变(如缓存值)的场景。 作用 访问 DOM 元素&#xff1a…