gpt4 book ai didi

c - C 中 64 位变量的按位移位 >= 32 运算

转载 作者:行者123 更新时间:2023-11-30 20:45:56 24 4
gpt4 key购买 nike

我正在尝试对 64 位变量进行大于 32 的移位操作。有人能告诉我我的代码出了什么问题吗?

处理器架构为AMD64,开发环境为Visual studio Community 2015和DevC++

我的代码如下所示:

#include <stdio.h>
#include <stdint.h>
int main(int argc, char *argv[])
{
uint64_t x = ~0;
printf("x is %8x \n", x);
x = ~((uint64_t)(1) << 31);
printf("x is %8x \n", x);
x = ~((uint64_t)(1) << 32);
printf("x is %8x \n", x);
return 1;
}

输出是:

x is ffffffff
x is 7fffffff
x is ffffffff

我整个早上都在想这个问题..我确实是一个在比嵌入式 8 位架构更大的 C 语言上的初学者:)

-Codester

最佳答案

  • uint64_t x = ~0;

    如果int,此代码将不起作用是32位的。如果你想设置uint64_t以可移植的方式“所有”,你需要做 uint64_t x = ~(uint64_t)0; .

  • %8x

    这不是 uint64_t 的正确格式说明符。您应该使用PRIx64来自inttypes.h 。示例:

    #include <inttypes.h>

    printf("x is %8" PRIx64 "\n", x);

关于c - C 中 64 位变量的按位移位 >= 32 运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33475703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com