gpt4 book ai didi

从 32 位地址转换为 64 位整数会产生意外结果

转载 作者:太空狗 更新时间:2023-10-29 17:22:09 24 4
gpt4 key购买 nike

<分区>

给定以下程序:

#include <stdio.h>

int main(int argc, char** argv)
{
int i;
void* p = &i;

printf("No cast, using %%p: %p\n",
p);
printf("Cast to unsigned long using conversion %%lx: %lx\n",
(unsigned long) p);
printf("Cast to unsigned long long using conversion %%llx: %llx\n",
(unsigned long long) p);
printf("Cast to unsigned long then unsigned long long using conversion %%llx: %llx\n",
(unsigned long long) (unsigned long) p);

return 0;
}

人们期望输出是什么?使用 GCC 4.4.7 编译并运行程序,输出如下:

No cast, using %p: 0xbf8aa3d8
Cast to unsigned long using conversion %lx: bf8aa3d8
Cast to unsigned long long using conversion %llx: ffffffffbf8aa3d8
Cast to unsigned long then unsigned long long using conversion %llx: bf8aa3d8

使用 clang 版本 3.4 编译并运行程序会产生我实际期望的结果:

No cast, using %p: 0xbfa64234
Cast to unsigned long using conversion %lx: bfa64234
Cast to unsigned long long using conversion %llx: bfa64234
Cast to unsigned long then unsigned long long using conversion %llx: bfa64234

从指针直接转换为 unsigned long long 时,GCC 似乎用 1 而不是 0 填充了最高有效位。这是 GCC 中的错误吗?

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