C中的64位整数声明
我试图用 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(). %x用于打印unsigned int。格式说明符和实际数据不匹配会printf()调用未定义的行为。
要以十六进制打印整数,您应该使用%llxforunsigned long long和PRIx64(from inttypes.h) for uint64_t。
#include <stdio.h>
#include <inttypes.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%llx", (long long) temp);
printf("n%llx", (long long) temp2);
printf("n%llx", 1ULL << 31ULL);
printf("n%llx", 1ULL << 32ULL);
printf("n%" PRIx64, var);
return 0;
}