Ice*_*ind 8 c# types overflow long-integer
如果32位处理器的长度确实只有32位,那么数学运算如何处理64位数?例如:
long lngTemp1 = 123456789123;
long lngTemp2 = lngTemp1 * 123;
Run Code Online (Sandbox Code Playgroud)
根据MSDN,C#中有一个长期签名的64位数字:http://msdn.microsoft.com/en-us/library/ctetwysk(VS.71).aspx
32位英特尔微处理器如何能够执行代码,如上所述而不会出现溢出?
他们使用进位位进行加法和减法。“带进位加法”和“带进位减法”(或“借用”)的汇编程序操作可用于任意位长的扩展精度加法和减法。
对于乘法,如果只有32位乘法结果,则可以将其分成16位值对并进行乘法,然后进行移位和加法(带进位),以从32位乘法中获得完整的64位结果。基本上,使用长手版本(任何两个16位乘法都适合32位结果)可用于以更有限的精度生成任意位长乘法。
FWIW,Intel 32位asm“ mul”指令可以在EDX:EAX中放入64位结果,因此您实际上可以在32位块中进行乘法(要添加64位值),而不是16位块(与32位值进行移位和相加)。
| 归档时间: |
|
| 查看次数: |
2215 次 |
| 最近记录: |