• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

int형 변수에 0xFFFFFFFF는 왜 저장이 안되나요?

21.01.22 00:17 작성 조회수 3.52k

4

제목 그대로입니다. 실수로 강의와 다르게 입력했는데 uint 형식을 int 형식으로 변환할 수 없다고 나오네요. 0xFFFFFFFF면 그냥 -1로 저장되어야 하는거 아닌가요?

답변 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이 들어갑니다.

Pebble님의 프로필

Pebble

2022.02.11

안녕하세요. 잘 몰라서 질문 드립니다.

int a = 0x0FFFFFFF

short b = (short)a;

 

에서 short로 캐스팅을 해주면

앞에 것이 날라가서 0xFFFF인데 이 값은 그러면 65535 아닌가요?

어떻게 해서 -1이 들어가게 되나요?