搞懂补码:CPU为啥非要用补码?不是位数不够补0!
一句口诀:负数的补码等于原码取反加一。
只背这个公式 ,很多人心里一直有个疑惑:补码,难道就是位数不够,往后面补几个0吗?其实完全不是!
补码诞生的根源 ,是硬件的一个现实难题:CPU里面只有加法器,天生没有减法器 。
如果专门去做一套减法电路,芯片设计会变复杂 ,成本也会增加。工程师想出一个绝妙办法:把减法运算,直接转换成加法来算。
公式: A − B = A + (−B的补码)
CPU不去直接做减法,把负数用补码编码,直接相加 ,就能得到减法的结果 。
拿最简单的4位二进制举例,4bit一共可以表示16种状态。
我们把16个状态一分为二:
0‑7 用来存正数;8‑15用来代表负数(‑8 ~ ‑1)。
规则
✅正数:补码 = 它本身,不需要做任何变换
✅负数:把对应正数的二进制全部按位取反 ,再加1,得到负数的补码
举个实例:计算 5‑3 ,等价于 5 + (-3)
1. +3的二进制: 0011
2. 求‑3的补码:全部位取反得到 1100 ,再加1 → 1101 , 1101 就代表‑3
3. 二进制加法运算:
0101 (5)
+ 1101 (‑3 的补码)
——————————
10010
4位寄存器只能保存4位,最高位多出来的1直接丢弃(溢出丢弃) ,剩下 0010 ,对应十进制就是2 。
5‑3=2,结果直接算对!全程只用了加法电路。
原码 、反码、补码三者区分
1. 原码:人的直觉写法。最高位当做符号位 ,0代表正数,1代表负数。
缺点:会出现+0、‑0两个0,编码浪费,硬件加减处理麻烦 。
2. 反码:只是一个中间过渡产物 ,计算机内存不会拿它存真实数字。
3. 补码:计算机内存真正存储整数的格式。解决双零问题,用加法实现减法,汇编调试看到内存里的数字 ,都是补码 。
划重点:不要把补码和8421‑BCD码搞混
- 补码:CPU内部整数运算用,专门处理正数 、负数加减。
- 8421 BCD码:多用于数码管显示,4位二进制存1位十进制数字 ,偏向给人看,不做负数运算。
本文来自作者[半槐]投稿,不代表点新号立场,如若转载,请注明出处:https://sc-hx.cn/cshi/202609-12168.html
评论列表(3条)
我是点新号的签约作者“半槐”
本文概览:补码计算(补码计算器)搞懂补码:CPU为啥非要用补码?不是位数不够补0! 一句口诀:负数的补码等于原码取反加一。 只背这个公式,很多人心里一直有个疑惑:补码,难道就是位数不够,...
文章不错《补码计算(补码计算器)》内容很有帮助