簡體   English   中英

如何在32位計算機上完成64位數學運算?

[英]How is 64-bit math accomplished on a 32-bit machine?

如果實際上32位處理器的長度實際上只有32位,那么數學運算如何在64位數字上工作? 例如:

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

根據MSDN,C#中的long是帶符號的64位數字: http : //msdn.microsoft.com/zh-cn/library/ctetwysk(VS.71).aspx

32位英特爾微處理器如何執行上述代碼而不會發生溢出?

他們使用進位位進行加法和減法。 “帶進位加法”和“帶進位減法”(或“借用”)的匯編程序操作可用於任意位長的擴展精度加法和減法。

對於乘法,如果只有32位乘法結果,可以將其分成16位值對並進行乘法,然后進行移位和加法(帶進位),以從32位乘法中獲得完整的64位結果。 基本上,使用長手版本(任何兩個16位乘法都適合32位結果)可用於以更有限的精度生成任意位長乘法。

FWIW,Intel 32位asm“ mul”指令可以在EDX:EAX中放入64位結果,因此您實際上可以在32位塊中進行乘法(要添加64位值),而不是16位塊(與32位值進行移位和相加)。

x86的32位指令集可用於64位算術,請參見擴展精度乘法

甚至32位處理器也經常帶有64位浮點單元-但是數據一次只能以32位總線傳輸。

但是,更一般而言,即使基礎處理器僅允許8位整數運算,也可以實現64位浮點。 但是,編譯器或程序員必須插入足夠的代碼才能虛擬化效果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM