Written on
·
4.3K
4
제목 그대로입니다. 실수로 강의와 다르게 입력했는데 uint 형식을 int 형식으로 변환할 수 없다고 나오네요. 0xFFFFFFFF면 그냥 -1로 저장되어야 하는거 아닌가요?
Answer 1
9
int의 모든 비트가 1로 켜진 상태 (0xFFFFFFFF)라면 -1이 맞지만,
거꾸로 0xFFFFFFFF 이라는 16진수 숫자는
기본적으로 10진수로 4294967295이라는 정수입니다.
즉 int a = 4294967295; 라고 하는 것과 완전 동일한데
이 숫자는 int 범위를 벗어나기 때문에 unsigned int 로 간주되고,
unsigned int를 int 타입에다 억지로 넣으려고 하기 때문에 에러가 나는 것입니다.
참고로 C#은 이렇게 타입 변환을 엄격하게 만들어서 프로그래머 실수의 여지를 줄여주지만,
C++에서 int a = 0xFFFFFFFF;을 하면 자연스럽게 -1이 들어갑니다.
안녕하세요. 잘 몰라서 질문 드립니다.
int a = 0x0FFFFFFF
short b = (short)a;
에서 short로 캐스팅을 해주면
앞에 것이 날라가서 0xFFFF인데 이 값은 그러면 65535 아닌가요?
어떻게 해서 -1이 들어가게 되나요?