计算机干货知识点,点点关注不迷路!
为什么计算机用补码表示负数?原码和反码又是什么?
本文将带你彻底搞懂原码、反码和补码,让你从此不再为这些概念头疼!
目录
在计算机科学中,原码、反码和补码主要用于二进制系统,是表示有符号整数(即正数、负数和零)的三种不同方式。
什么是原码、反码和补码?
定义如下:
原码:最简单的二进制表示法,最高位为符号位,
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”中较为基础的计算机科学知识,供读者选读。本专栏更新频率不定,但一定都是干货,订阅不亏!