32位操作系统支持64位无符号整数!!如何?

32 bit operating system supporting 64 bit unsigned integer!! how?

我在 windows 7 32 位计算机上工作,我认为 32 位 OS 将无法分配 64 位无符号数。但我尝试了任何方式...在 C++ 程序中我编写了以下代码..

#include <iostream>
#include <climits>
using namespace std;

int main() {
    unsigned long long i = 0;

    cout << i << endl;

    return 0;
}

尽管我预料程序编译会出错,但 运行 成功!但是我不明白怎么办!谁能给我解释一下...提前致谢:)

64 位 CPU 可以将 64 位无符号数直接加载到寄存器中,而在 32 位 CPU 上它必须一次处理部分数字. C++ 编译器向您隐藏了这些差异。我们有能力在 8 位机器上处理 64 位无符号数,只是需要更多的周期才能完成。

让我们看看它编译成什么。我添加了一些算术以使其更清楚。

6           unsigned long long i = 0;
   0x0804868d <+18>:    mov    DWORD PTR [ebp-0x10],0x0
   0x08048694 <+25>:    mov    DWORD PTR [ebp-0xc],0x0

7           unsigned long long j = 3;
   0x0804869b <+32>:    mov    DWORD PTR [ebp-0x18],0x3
   0x080486a2 <+39>:    mov    DWORD PTR [ebp-0x14],0x0

8           cout << i + j << endl;
   0x080486a9 <+46>:    mov    ecx,DWORD PTR [ebp-0x10]
   0x080486ac <+49>:    mov    ebx,DWORD PTR [ebp-0xc]
   0x080486af <+52>:    mov    eax,DWORD PTR [ebp-0x18]
   0x080486b2 <+55>:    mov    edx,DWORD PTR [ebp-0x14]
   0x080486b5 <+58>:    add    eax,ecx
   0x080486b7 <+60>:    adc    edx,ebx

如您所见,编译器生成了加载和存储两条指令。加法是使用adc(add with carry)将进位位进位到高位进行的。