다음과 같은 이상한 동작을 설명 할 수 있습니까?int64_t 포인터를 캐스팅 할 때 가장 중요한 32 비트가 손실됩니다.
I 64 비트 인텔 플랫폼에서 다음 프로그램 실행 : I1은 최하위 32 비트를 포함하는 이유
이ptr = 0x7fbfffdf2c
sizeof(ptr) = 8
i1 = 0xbfffdf2c
sizeof(i1) = 8
사람이 설명 할 수 :
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? (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
흠, 32 비트가 누락 되었습니까? 0x7f? –