만약 이렇게 두개의 변수 가 있다면..
unsigned int a = 0x80000000
int a = 0x80000000
printf("%d\n", (a>>32))
이 결과는 코세님 강좌에서는 0
printf("%d\n", (b>>32))
이 결과는 코세님 강좌에서는 -1
제가 비쥬얼 스튜디오 2015를 쓰는데요..
이렇게 나옵니다..
unsigned int는 부호없는 정수형 아닌가요? 왜 음수가 나오죠...ㅠㅠ
unsigned short c = 0x8000
short d = 0x8000
이렇게 하고 16비트씩 오른쪽 시프트 연산하면
코세님 말처럼 정상적으로
0하고 -1이 나오는데..
unsigned int하고
int는 저렇게 나오네요..
질문1)
unsigned int로 본다면
그리고 0x00000001에서 오른족 쉬프트 연산하면
더이상 갈 곳이 없는데..
0이 되는 이유가 머죠?
저는 왜 저렇게 나오는거죠..
질문 2)
int로 본다면
그리고 0x00000001에서 오른족 쉬프트 연산하면
-1이 되는 이유가.. 오버플로우, 언더플로우 때문인가요??
질문 3)
int a = 0x8000000하면
오른쪽으로 쉬프트 연산해도 msb는 계속 1로 유지한 상태로 가나요?
오버플로우 아니면 음수가 나올 수가 없지
갈 곳이 없는데 0이 되는 이유가 뭐냐니.. 0x00000001을 오른쪽으로 한칸 밀면 0이 되지
rotate랑 shift 차이가 그거잖아. rotate는 반대쪽으로 가서 붙고 shift는 그냥 버려지고
그러면 왜 제 결과는 저렇게 나오는건가요?
short로 하면 정상적으로 나오는데...
그리고 int형 같은경우 0x80000000로 시작하면 -128 -64 이런식으로 나오던데 마지막에 -1이 되는 이유는 먼가요?
부호형이라 음수로 잡히는거같은데.. 코세님 강좌에서 -1로 된다는게 이해가 안되네여.
32비트잔아요 1개당 4비트씩 8개 32비트
16진수 표현이라
나 롤중이라 잠만 ㅋㅋ; 나도 핵초보긴하지만
아는만큼 알려드림
%u
아 u로봤다 나도 %%d로 해봤는데 0 -1나옴
%x
signed 는 MSB 가 끌려내려오기 때문에 결과적으로 1이 다 채워진 값인 -1이 되는거
난 정상적으로 나오는데? 32bit 64bit 모두. VS 2015 다.
늦게까지 안자네 다들 ㅋㅋ