#include<stdio.h>
int main()
{
unsigned char c =292;
printf("%d\n",c);
return 0;
}
다음 코드는 출력 "36"을 제공합니다. 왜 그런 일이 발생했는지 알고 싶습니까?부호없는 char에 255보다 큰 정수를 할당 할 때 다른 출력을주는 이유는 무엇입니까?
#include<stdio.h>
int main()
{
unsigned char c =292;
printf("%d\n",c);
return 0;
}
다음 코드는 출력 "36"을 제공합니다. 왜 그런 일이 발생했는지 알고 싶습니까?부호없는 char에 255보다 큰 정수를 할당 할 때 다른 출력을주는 이유는 무엇입니까?
문자의 크기 data_type은 1 바이트이고 범위는 0에서 255까지입니다. 하지만 초기화는 255보다 큽니다 (즉, c = 292> 255)
따라서 c는 (292-255) 번째 값 (즉, 37 번째 값)과 값 c 저장소는 36입니다 (0이 첫 번째 값이기 때문에).
그것은 당신이 C = 36
마지막의 printf() FUNC를 초기화 의미합니다. 메모리에서 값을 가져 와서 값 36을 인쇄하십시오.
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
나는 당신이'292 - (255 + 1)'을 의미한다고 생각한다. –
감사합니다. @AjayBrahmakshatriya! – gsamaras
292가 크므로. – tkausl
추가 힌트에 대해서는 경고와 함께 컴파일하십시오. – user2864740
시스템에서'UCHAR_MAX'을 출력하십시오 –