#include <stdio.h>
#include <stdlib.h>
int main()
{
long unsigned int data = 0;
int a = 32;
data |= 1 << a;
printf("%lu\n", data);
}
请问各位大佬,这个最后打印值为什么是1呢,为什么不是4,294,967,296,64位操作系统下
#include <stdio.h>
#include <stdlib.h>
int main()
{
long unsigned int data = 0;
int a = 32;
data |= 1 << a;
printf("%lu\n", data);
}
请问各位大佬,这个最后打印值为什么是1呢,为什么不是4,294,967,296,64位操作系统下
data |= 1<<a;
这里形成的数据类型跟这个1有很大关系,如果修改为如下代码,将1强制为long long类型(64位),然后用%lld打印结果,则符合你的预期。说明程序默认的数据类型还是32位的,即使是64位操作系统。你需要显式定位64位变量类型
long long d = 1;
long long a = 32;
long long data = 0;
data |= d << a;
printf("%lld\n", data);