#include <stdio.h>
int main(void)
{
int n = 7;
printf("n: %d ", n);
printf("&n: %x ", &n);
printf("&n: %lx ", &n);
printf("포인터 하나당 크기는 %ld 바이트 ", sizeof(void *));
printf("&n: %p ", &n);
printf("================================ ");
printf("&n %p ", &n);
printf("&n %p ", (void*)((int)&n << 4));
printf("&n %p ", (void*)((int)&n << 8));
printf("&n %p ", (void*)((int)&n << 12));
putchar(' ');
return 0;
}
이거 출력값이
n: 7
&n: efbff5c8
&n: 7ffeefbff5c8
포인터 하나당 크기는 8 바이트
&n: 0x7ffeefbff5c8
================================
&n 0x7ffeefbff5c8
&n 0xfffffffffbff5c80
&n 0xffffffffbff5c800
&n 0xffffffffff5c8000
인데 앞에 0000이 생략된거였다면 이렇게 안나오지않나...??
만약 앞에 0000이었으면 <<4에서는
원래 0000 이 비트로 나타내면 0000 0000 0000 0000 이니까
앞에 4개의 0000 사라지고 뒤에 7 (0000 0111)의 앞의 4개인 0000이 들어가서
그대로 0000 0000 0000 0000 이니까 출력값은 0000으로 나와야하는거 아닌가
ㄱㄷ 디버깅하고 옴
뒤에 7(0000 0111)이 아니라 7은 그냥 0111 이니까 그게 앞으로 들어가면
0000 0000 0000 0111 이니까
결국 0007ffeefbff5c80 이 되야하지 안나~ 가 내 생각
왜 근데 앞에 << 를 하는데 앞에가 다 f로 되는거야... 아 알고싶다
비트 쉬프트를 할때 qword가 dword가 되고 다시 dword를 qword로 복원시킬 때 2의 보수때문에 결과가 바뀜
확실하지는 않은데 4바이트 부호 정수를 8바이트 포인터 변수로 바꿀때 앞에 빈 4바이트를 f 로 처리하는 듯, unsigned int 로 사용하면 0이 나올 것 같은데
그러네. int캐스팅이 아니라 longlong으로 해야겠네
방금 테스트 해봤는데 int 를 unsigned int 로 바꾸면 0으로 채워짐, 그냥 int -> 포인터 변환 규칙임.
글 새로쌌음
http://gall.dcinside.com/board/view/?id=programming&no=872337&page=1
ㄴ 오 갓 44 땡큐땡큐 맥이라서 그런가 unsinged int 로 하면 안나오고 long long으로 하면 나오네 땡큐!