为什么在转换为uint64_t时32位指针符号扩展?

时间:2017-03-26 22:55:17

标签: c pointers casting

当编译为32位进程时,以下代码打印ffffffff82223333而不是82223333,因此在转换为uint64_t时,指针似乎总是符号扩展。那是为什么?

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

int main()
{
    void *p = (void*) 0x82223333;
    uint64_t x = (uint64_t) p;
    printf("%llx\n", x);
}

我认为地址永远不会是负面的,所以它应该被视为无符号。

我的问题也与此question有关(因为Windows句柄只是指针的typedef)。

Similar question,但仍无法解释为什么编译器开发人员会选择这样做。

0 个答案:

没有答案