计算机负数为什么要用补码表示
在计算机领域,数字的编码方式蕴含着许多精妙的设计理念。今天我们来深入讨论机器数与真值的概念,以及原码、反码、补码——这些基础知识看似简单,但一旦彻底掌握,许多底层运行机制便会变得清晰易懂。 机器数与真值 机器数 一个数值在计算机中的二进制表现形式,被称为它的机器数。机器数带有符号位:正数的符号位为0
在计算机领域,数字的编码方式蕴含着许多精妙的设计理念。今天我们来深入讨论机器数与真值的概念,以及原码、反码、补码——这些基础知识看似简单,但一旦彻底掌握,许多底层运行机制便会变得清晰易懂。
机器数与真值
机器数
一个数值在计算机中的二进制表现形式,被称为它的机器数。机器数带有符号位:正数的符号位为0,负数的符号位为1。然而,不能简单地把符号位改为1就得到负数的表示——来看下面的示例:
- 十进制数 +3,机器数为
00000000000000000000000000000011 - 十进制数 -3,机器数并非
10000000000000000000000000000011这么直接。实际存储的是11111111111111111111111111111101——这是 -3 的补码形式。因为负数在计算机内部都是以补码方式存储的。
真值
真值指的是数学意义上的实际数值。由于最高位用作符号位,机器数的形式值与其真值并不相等。例如:
00000000000000000000000000000011 -> +3
11111111111111111111111111111101 -> -3
上述讨论针对有符号数。对于无符号数而言,机器数与真值是完全一致的。
无符号数与有符号数的换算方法
无符号数换算
使用函数 B2Uw(Binary to Unsigned)来表示,宽度为 w:

以4位二进制数为例:




有符号数的换算方法
上文提到,有符号数在计算机中以补码形式存在,其换算公式用 B2Tw(Binary to Two's complement)表示:

下面以4位二进制数为例:




此外,还有一种更通用的方法:利用原码、反码、补码之间的转换规则。
原码、反码、补码
计算机中机器数的运算效率问题
首先要明确:计算机内部统一使用加法运算。没错,计算机本身并不会直接执行减法。在补码概念提出之前,让我们观察几个例子:

可以看到,当负数参与加法运算时,结果竟然出现了错误。
为了获得正确结果,计算机不得不采用迂回方式,这必然影响运行效率。为了解决这一效率瓶颈,科学家们提出了补码的概念。
补码
利用补码获取真值
如何通过补码规则得到负数的真值呢?

假设我们从计算机中读取到一个二进制数 10000001(8位机器数),如何求得它的真值?
- 步骤1:首先
10000001是补码形式的机器数。实际上,在计算机系统中所有整数(包括正数和负数)都以补码形式存储——正数的补码与其原码相同,因此统称为补码并无问题。 - 步骤2:根据补码转换为反码的规则,补码
10000001减1,得到反码:10000000。 - 步骤3:按照反码转换为原码的规则,符号位保持不变,其余各位取反,得到原码:
11111111。 - 步骤4:依据原码的真值定义:符号位不参与数值计算,其余位即为真值的绝对值,因此真值为 -127。

补码的运算逻辑
回到之前讨论运算效率时列举的正正、负负、正负相加的示例。现在我们用补码来重新审视:

可以看出,将符号位的含义以补码形式存入计算机后,减法运算就能被加法所替代,从而大幅提升了运行效率。
补码的设计由来
前面介绍了许多内容,但大家可能会问:补码到底是如何设计出来的?这其实与数学中的“补数”概念密切相关。
补数
生活中有很多实例——凡是具有周期性的系统,都可以用补数来描述。例如时钟或转盘:

假设当前时间是2点,想让指针指向12点,有两种操作方式:
- 方式1:顺时针旋转10格,执行的是加法(+10)。
- 方式2:逆时针旋转2格,执行的是减法(-2)。
无论采用哪种方式,指针最终都指向12点,效果完全相同。我们就称+10和-2互为补数,它们的绝对值之和12即为补数的模。
这一规律被应用于计算机二进制运算中。来看一个例子:假设要计算 5 + (-1) = 5 + ( ? )
- 5在计算机中的原码:00000101
- -1在计算机中的原码:10000001
要将减法转化为加法,关键在于找到合适的模,然后用-1的正补数进行加法运算。 回想时钟的例子,每拨12格为一个周期。对于8位二进制数,其取值范围是 -128 ~ 127(这里用8位简化分析,实际系统中常采用32位或64位),它的一个周期是256,因此模为256(即 1 0000 0000)。无论加256还是减256,二进制值都不变,因为溢出位会被丢弃。
由此,我们找到-1的模是256,其补数为+255(0 1111 1111)。于是 5 - 1 就转换为 5 + 255:
5: 0000 0101
255: 0 1111 1111
相加后:1 0000 0100 -> 最高位溢出丢弃,结果为4
看,结果与5-1是不是完全一致?
计算机中的补码正是遵循这一思路:找到与负数等价的正补数,用该正补数替代负数,从而将减法运算转化为两个正数的加法。补码的诞生与运算器电路设计密切相关——从设计者的角度出发,当然希望电路越简单越好,而利用正补数代替负数可以直接去掉减法器,大大简化电路结构。
我们下期再见。
参考资料:为什么计算机中的负数要用补码表示?
你是一名 AI 行业编辑,请围绕下面这条热点输出一份资讯解读:
热点:计算机负数为什么要用补码表示要求:
1. 先用一句话解释这条热点在讲什么
2. 再总结它为什么重要
3. 说明会影响哪些 AI 产品或内容方向
4. 最后给出 3 个适合资讯站使用的标题
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
相关热点VSona是一个开发AI伴侣的平台,提供聊天、角色扮演、创意表达等功能。用户可自定义头像和声线,支持文字或语音互动。AI伴侣具备动画反馈和语音响应,营造安全、沉浸的个性化互动空间。
MastermallowAI音频母带处理适用于音乐、播客及内容创作者。可将原始录音一键转为专业音频,提升播客音质,为音乐作品添加母带效果。特色包括智能音频分析与增强、原音与母带实时对比、高质量成品下载。
MyCharacter AI是基于Polygon链的去中心化应用,通过CharacterGPTV2多模态AI系统生成具有独特形象和性格的AI角色。用户可与角色实时互动,并将其作为NFT收藏、交易或转让,实现AI角色生成、互动与资产化的一体化。
ToMate基于AI智能高效处理客户消息,适用于客服、销售及市场营销等场景。它能及时贴心回复,支持解析多种文件格式,并采用灵活定价方案,显著提升工作效率与客户满意度。
- 日榜
- 周榜
- 月榜
热点快看
