8

如果 32 位处理器的长度确实只有 32 位,那么数学运算如何处理 64 位数字?例如:

long lngTemp1 = 123456789123;
long lngTemp2 = lngTemp1 * 123;

根据 MSDN,C# 中的 long 是有符号的 64 位数字:http: //msdn.microsoft.com/en-us/library/ctetwysk (VS.71).aspx

一个 32 位英特尔微处理器如何执行代码,如上面的代码而不会溢出?

4

3 回答 3

5

他们使用进位位进行加法和减法。“进位加法”和“进位减法”(或“借位”)的汇编器操作可用于任意位长度扩展精度加法和减法。

对于乘法,如果只有 32 位乘法结果,则可以将其分解为 16 位值对并乘法,然后移位和加法(带进位)以从 32 位乘法中获得完整的 64 位结果。基本上,执行长手版本(任何两个 16 位乘法都适合 32 位结果)可用于使用更有限的精度生成任意位长度的乘法。

FWIW,英特尔 32 位 asm“mul”指令可以将 64 位结果放入 EDX:EAX,因此您实际上可以在 32 位块(要添加 64 位值)而不是 16 位块中进行乘法运算( 32 位值进行移位和相加)。

于 2010-07-06T20:57:26.197 回答
0

x86 的 32 位指令集可用于 64 位算术,请参阅 扩展精度乘法

于 2010-07-06T20:57:01.050 回答
0

即使是 32 位处理器通常也带有 64 位浮点单元 - 但数据一次只能以 32 位总线传输。

然而,更一般地说,即使底层处理器只允许 8 位整数运算,也可以实现 64 位浮点。但是,编译器或程序员必须插入足够的代码才能虚拟化效果。

于 2010-07-06T20:58:06.333 回答