【发布时间】:2021-08-18 20:06:39
【问题描述】:
我试图用 unsigned long long 数据类型在 C 中声明 64 位变量,但它不起作用并且行为类似于 uint32 位变量。访问/检查 32 以上位的解决方案是什么?
#include <stdio.h>
#include <stdint.h>
int main() {
// Write C code here
printf("Hello world");
unsigned long long temp = 0x1234567890123456ULL;
unsigned long long temp2 = temp >> 1;
uint64_t var = 0x1234567890123456;
printf("\n%x", (long long) temp);
printf("\n%x", (long long) temp2);
printf("\n%x", 1ULL << 31ULL);
printf("\n%x", 1ULL << 32ULL);
printf("\n%x", var);
return 0;
}
输出:
世界你好
90123456
48091a2b
80000000
0
90123456
【问题讨论】:
-
您告诉
printf()打印unsigned int而不是unsigned long long int。 -
编译代码时编译器没有给你警告吗?默认情况下,clang 和 gcc 都会对此发出警告并告诉您如何修复它。