【CS知识点】一文搞懂原码、反码和补码

计算机干货知识点,点点关注不迷路!

为什么计算机用补码表示负数?原码和反码又是什么?

本文将带你彻底搞懂原码、反码和补码,让你从此不再为这些概念头疼!


目录

什么是原码、反码和补码?

为什么需要反码和补码?

补码是如何工作的?

加法运算

减法运算

补码的数学本质(了解)

模运算

负数的补码表示

为什么补数可以统一加减法?


在计算机科学中,原码、反码和补码主要用于二进制系统,是表示有符号整数(即正数、负数和零)的三种不同方式。

什么是原码、反码和补码?

 定义如下:

原码:最简单的二进制表示法,最高位为符号位0 表示正数,1 表示负数。

反码:正数同原码,负数在源码基础上符号位不变,其余位取反。

补码:正数同原码,负数为反码加 1

为什么需要反码和补码?

在机器运算中,原码存在局限性:在表示负数时,加减法运算复杂,无法统一处理(硬件设计复杂)。

对此,反码可以简化有符号数的加减法的问题,减去一个数等同于加上它的反码但存在“+0”和“-0”表示不唯一的问题。

引入补码,在简化加减法的基础上,统一了零的表示。

使用补码,加法和减法运算可以统一处理。这意味着计算机的硬件只需要实现加法逻辑,减法可以通过加一个数的补码来实现。

补码是如何工作的?

由上述原因,现代计算机系统普遍使用补码进行数值计算,能够将加法和减法统一为加法运算,从而简化计算机的硬件设计。

下面我们将分加法和减法运算讨论补码如何简化:

加法运算

直接将两个补码相加。

例:

计算5+3时

其中,5的补码为0000 0101

3的补码为0000 0011

将两数的补码相加,并忽略最高位进位,得:0001 0000,即为2。

减法运算

将减法运算改写为加法运算,并且忽略最高位的进位:A-B=A+(-B)

计算5-3时,可将其视作5+(-3)

其中,5的补码为0000 0101

-3的补码为1111 1101

将两数的补码相加,并忽略最高位进位,得:(1)0000 0010,即为2。

补码的数学本质(了解)

补码的设计基于模运算(Modular Arithmetic),其核心思想是将负数表示为正数的补数。

模运算

对于一个固定的模数 M,任何数 A 的补数为 M - A 。

在 n 位二进制系统中,模数为 2 ^ n 。例如,8 位二进制的模数为 256 。

负数的补码表示

 负数 - A 的补码为 2 ^ n - A 。

以 8 位二进制为例,- 5 的补码为 256 - 5 = 251 ,即 1111 1011 。

为什么补数可以统一加减法?

 加法的模运算性质: (A + B) mod M = (A mod M + B mod M) mod M 。

 减法的模运算性质:(A - B) mod M = (A + (M - B) )mod M 。

其中,(M - B)即为负数的补码。

新专栏

【CS知识点】专栏旨在补全“从零开始学习xxx”中较为基础的计算机科学知识,供读者选读。本专栏更新频率不定,但一定都是干货,订阅不亏!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值