我long int
对 16 位 CPU 的大小有疑问。看看它的架构:
没有寄存器长度超过 16 位。那么,怎么会有long int
16bits以上的呢。事实上,根据我的任何处理器,数据类型的最大大小必须是通用寄存器的大小。我对吗?
我long int
对 16 位 CPU 的大小有疑问。看看它的架构:
没有寄存器长度超过 16 位。那么,怎么会有long int
16bits以上的呢。事实上,根据我的任何处理器,数据类型的最大大小必须是通用寄存器的大小。我对吗?
是的。事实上,C 和 C++ 标准要求sizeof(long int) >= 4
.*
(我假设CHAR_BIT == 8
在这种情况下。)
这与 32 位机器上的 64 位整数处理相同。它的实现方式是使用两个寄存器来表示下半部分和上半部分。
加法和减法作为两条指令完成:
在 x86 上:
add
以及“带进位加法”adc
在哪里adc
sub
在sbb
哪里sbb
例如:
long long a = ...;
long long b = ...;
a += b;
将编译为:
add eax,ebx
adc edx,ecx
whereeax
和edx
是 的下部和上部a
。和是 的下部ebx
和ecx
上部b
。
双字整数的乘法和除法更复杂,但它遵循相同的小学数学 - 但每个“数字”都是一个处理器字。
不可以。如果机器没有可以处理 32 位值的寄存器,它必须在软件中模拟它们。它可以使用任何库中用于任意精度算术的相同技术来做到这一点。