无论你是使用的最低端的51单片机还是最高端i9处理器,在这个处理器中只有加法运算电路没有减法运算电路,若你过有一些计算机基础,大概应该知道这是通过补码实现的。但处理器是如何将通过补码加法实现减法的呢?
1. 补码又是如何实现将加法运算转换成加法的呢?
首先我们先看加法和减法的本质到底是什么,从网络上能搜索到很多关于加减法本质的理解,自认为一个比较好的解释是从数轴的角度去理解加减法的本质:
- 加法的本质是将一个数向右移动,如a+b,是将数a向右移动b个单位
- 减法的本质是将一个数向左移动,如a-b,是将数a向左移动b个单位

在数学上整数的数量是无限的,而在处理器中为了平衡效率和性能,对整数的表示一般为有限个数,如uint8(用8个bit位去表示一个整数)最大能表示256个数、uint16最能表示65536个数、uint32可表示4294967296(约42亿)个数,当使用有限长度空间去表示整数后将会产生一个在数学上不会出现的现象---溢出(溢出的高位被抛弃),如uint8最大能表示255,这时若向其赋值256,这个数将产生溢出,溢出后会变成0,同理向其赋值257后会变成1.
基于处理器存在溢出规律的特性,那么

本文探讨了处理器中如何通过补码实现加法模拟减法,包括加减法的本质、补码的运用,以及为何“按位取反加一”可以计算补码。重点介绍了符号位在加法中的作用和溢出规则。
最低0.47元/天 解锁文章
4004





