64位变量在c ++中奇怪地起作用

Mac*_*nes -1 c++ bits

为什么64位变量在真正的位进入第31位并且进一步变得更加明显?在第32位它返回一个非常大的值然后重置.

#include <iostream>
using namespace std;
int a[65];
int main()
{
a[0]=1;
for(int i=0;i<=63;++i)
{
    for(int k=7;k>=0;--k)
    {
     for(int j=7;j>=0;--j)
    cout<<a[k*8+j];
    cout<<' ';
    }
    cout<<'=';
    cout<<(unsigned long long)(1<<i);
    cout<<'\n';
        a[i]=0;
        a[i+1]=1;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)

Gau*_*gal 6

(unsigned long long)(1<<i);
Run Code Online (Sandbox Code Playgroud)

1仍然在这里int.你把结果(1<<i)投入了unsigned long long.

使用

cout<<((unsigned long long)1<<i);
Run Code Online (Sandbox Code Playgroud)

或者干脆

cout<<(1ULL<<i);
Run Code Online (Sandbox Code Playgroud)