gpt4 book ai didi

c - 将指针转换为 int64_t 时丢失了最重要的 32 位

转载 作者:行者123 更新时间:2023-12-05 01:29:42 27 4
gpt4 key购买 nike

有人可以解释以下奇怪的行为吗?

我在 64 位 Intel 平台上运行以下程序:

include <stdio.h>
#include <stdint.h>

int main(void)
{
int x;
int *ptr = &x;

printf("ptr = %p\n", ptr);
printf("sizeof(ptr) = %d\n", sizeof(ptr));

int64_t i1 = (int64_t) ptr;
printf("i1 = 0x%x\n", i1);
printf("sizeof(i1) = %d\n", sizeof(i1));

return 0;
}

此程序产生以下输出:

ptr = 0x7fbfffdf2c
sizeof(ptr) = 8
i1 = 0xbfffdf2c
sizeof(i1) = 8

谁能解释为什么 i1 只包含 ptr 的最低有效 32 位? (注意它缺少 0x7f)。

Compiler: gcc version 3.4.6 20060404 (Red Hat 3.4.6-9)
OS: Linux scream 2.6.9-67.ELsmp #1 SMP Wed Nov 7 13:56:44 EST 2007 x86_64 x86_64 x86_64 GNU/Linux
Processor: Intel(R) Xeon(R) CPU E5430 @ 2.66GHz

最佳答案

它哪儿也没去.. 你的打印语句是错误的。试试这个:

printf("i1 = 0x%lx\n", i1);

关于c - 将指针转换为 int64_t 时丢失了最重要的 32 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1018452/

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