mirror of
https://github.com/Aexiar/c.git
synced 2024-10-22 12:05:45 +00:00
c
This commit is contained in:
parent
69d7472e28
commit
6859f900d5
@ -1153,6 +1153,15 @@ int main() {
|
|||||||
## 3.6 计算机底层为什么使用补码?
|
## 3.6 计算机底层为什么使用补码?
|
||||||
|
|
||||||
* 如果计算是 `2 - 2` ,那么可以转换为 `2 + (-2)`,这样计算机内部在处理`减法计算`的时候,就会将其转换为`加法计算`的形式,以简化硬件设计和提高计算效率。
|
* 如果计算是 `2 - 2` ,那么可以转换为 `2 + (-2)`,这样计算机内部在处理`减法计算`的时候,就会将其转换为`加法计算`的形式,以简化硬件设计和提高计算效率。
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
>
|
||||||
|
> * 加法和减法是计算机中最基本的运算,计算机时时刻刻都离不开它们,所以它们由硬件支持支持。为了提高加法和减法的运行效率,硬件电路必须设计得尽量简单。
|
||||||
|
> * 对于有符号位的数字来说,内存需要区分符号位和数值位:对于人类来说,很容易识别(最高位是 0 还是 1);但是,对于计算机来说,需要设计专门的电路,这无疑增加了硬件的复杂性,增加了计算时间。如果能将符号位和数值为等同起来,让它们一起参与运算,不再加以区分,这样硬件电路就可以变得简单。
|
||||||
|
> * 此外,加法和减法也可以合并为一种运算,即:加法运算。换言之,减去一个数就相当于加上这个数的相反数,如:5 - 3 相当于 5 +(-3),10 -(-9)相当于 10 + 9 。
|
||||||
|
> * 如果能够实现上述的两个目标,那么只需要设计一种简单的、不用区分符号位和数值为的加法电路,就能同时实现加法和减法运算,而且非常高效。其实,这两个目标已经实现了,真正的计算机硬件电路就是这样设计的。
|
||||||
|
> * 但是,简化硬件电路是有代价的,这个代价就是有符号数在存储和读取的时候都要继续转换。这也是对于有符号数的运算来说,计算机底层为什么使用补码的原因所在。
|
||||||
|
|
||||||
* `最高位`表示`符号位`,由于符号位的存在,如果使用`原码`来计算,就会导致`计算结果不正确`,即:
|
* `最高位`表示`符号位`,由于符号位的存在,如果使用`原码`来计算,就会导致`计算结果不正确`,即:
|
||||||
|
|
||||||

|

|
||||||
|
Loading…
x
Reference in New Issue
Block a user