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 longPRIx64(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;
}


以上是C中的64位整数声明的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>