2017-10-27 5 views
-3
#include<stdio.h> 
int main() 
{ 
    unsigned char c =292; 
    printf("%d\n",c); 
    return 0; 
} 

다음 코드는 출력 "36"을 제공합니다. 왜 그런 일이 발생했는지 알고 싶습니까?부호없는 char에 255보다 큰 정수를 할당 할 때 다른 출력을주는 이유는 무엇입니까?

+1

292가 크므로. – tkausl

+0

추가 힌트에 대해서는 경고와 함께 컴파일하십시오. – user2864740

+2

시스템에서'UCHAR_MAX'을 출력하십시오 –

답변

1

문자의 크기 data_type은 1 바이트이고 범위는 0에서 255까지입니다. 하지만 초기화는 255보다 큽니다 (즉, c = 292> 255)

따라서 c는 (292-255) 번째 값 (즉, 37 번째 값)과 값 c 저장소는 36입니다 (0이 첫 번째 값이기 때문에).

그것은 당신이 C = 36

마지막의 printf() FUNC를 초기화 의미합니다. 메모리에서 값을 가져 와서 값 36을 인쇄하십시오.

4

292가 unsigned char 변수에 맞지 않기 때문에.

#include <stdio.h> 
#include <limits.h> 
int main() 
{ 
    unsigned char c =292; 
    printf("%d %d\n", c, UCHAR_MAX); 
    return 0; 
} 

및 출력 확인 :

나는이 프로그램을 컴파일하는 것이 좋습니다

prog.c: In function 'main': 
prog.c:5:21: warning: unsigned conversion from 'int' to 'unsigned char' changes value from '292' to '36' [-Woverflow] 
    unsigned char c =292; 
        ^~~ 
36 255 

그래서, 내 시스템의 UCHAR_MAX가 255을, 그리고 당신이 할당 할 수있는 가장 큰 값이다 ~ c.

292 단지 c 오버플, 그것을 부호 형이기 때문에, 그것이 0 ~ 255까지 진행 따라서 당신 292주고 감싸는 - (+ 1 (255)) = 36

+2

나는 당신이'292 - (255 + 1)'을 의미한다고 생각한다. –

+0

감사합니다. @AjayBrahmakshatriya! – gsamaras