· 톺아보기

[C++] unsigned int 변수에 음수가 저장되나요?

Restarted ·

조회 18,190 · 공감 0 · 댓글 7

unsigned 는, 양수만 다루도록 한다고 알고있는데..

VS2008 환경에서 실제로 다음과 같이 실행해보면,

 

unsigned int x = -1;

printf("%d", x);

 

출력이 -1 로 나옵니다.

음.. 그럼 음수도 저장 된다고 봐야되는 거 아닌가요?

 

궁금하네요 ㅠㅠ
 

댓글 7

  1. 아둔의창 ·
    음수 저장 안 됩니다.
    저건 그냥 (int)((unsigned int)(-1))한 거랑 마찬가지고요
    그렇게 넣고 x 가지고 곱하기 나누기 막 계산하다 보면 결과가 병신됩니다.
  2. 케이하나 ·
    signed와 unsigned가 계속 타입캐스팅 되었다고 보시면 됩니다.
    from CV
  3. byeongkyu ·
    0xFFFFFFFF가 저장되지 않나요??
  4. Ludvik ·
    이렇게 쓰시면 큰일납니다. C++을 사용하신다면, 입출력 루틴은 (본의 아니게 일어나는) 이러한 사태를 포함해서 여러가지 이유로 iostream (cin/cout)을 사용하실 것을 권장합니다.
  5. Restarted ·
    아하.. 안되는게 맞는거군요..
    답변 주신 고수님들 감사합니다!!
  6. Afri ·
    C++ 이라기보단 C 질문인데, printf 에서 맨 앞의 format string 제외하면 나머지는 va_arg/va_list 로 넘어가기때문에 format string 뒤쪽의 argument 에 대해서는 타입 정보를 못받습니다. 즉, 순수하게 1111...1111 같은 비트 덩어리만 넘어가는거고, 저 bit 를 해석하는건 %d 에 달려있죠. %d 는 int 에 대응되는거니 저 bit 덩어리를 int 로 해석해서 -1 이 되는거고요. 같은 이유로, printf 에서는 float 이나 double 이나 둘다 %f 를 써도 되지만, scanf 에서는 %f, %lf 구분을 해줘야 하죠.
  7. 랜덤여신 ·
    저장 됩니다. C/C++에서 양수와 음수의 구분은 '사용할 때' 일어납니다. 타입 검사가 엄격하지 않기 때문이죠. 그래서 -1 을 unsigned int 에 넣는 대신 %d 로 사용하기만 하면 별 문제가 없는 것입니다.

아무거나질문 최근 글

아무거나질문 목록 더 보기