2020. 1. 13. 02:14ㆍProgramming Language/C
<각 자료형의 크기>
자료형 |
크기 |
값의 범위 |
char |
1 byte |
-128~127, 0~255 |
unsigned char |
1 byte |
0~255 |
signed char |
1 byte |
-128~127 |
int |
2 or 4 byte |
-32,768~32,767 or |
unsigned int |
2 or 4 byte |
0~65,535 or |
short |
2 byte |
-32,768 ~ 32,767 |
unsigned short |
2 byte |
0 ~ 65,535 |
long |
4 byte |
-2,147,483,648 ~ 2,147,483,647 |
unsigned long |
4 byte |
0 ~ 4,294,967,295 |
<Overflow Underflow>
char 크기는 -128 ~ 127까지다.
근데 cNum1에는 범위가 벗어난 128과 cNum2에는 범위가 벗어난 -129가 선언이 되었다.
출력 결과는 이렇다.
출처 : https://dojang.io/mod/page/view.php?id=32
1. cNum1에 -128이 나오냐면 처음에 cNum1에 128을 넣었다. 하지만 크기는 -128 ~ 127까지다. 127까지인데 128을 넣어서 오버플로우가 발생한다(1만큼). 그래서 127의 다음숫자는 128이지만 char 자료형의 크기는 -128 ~ 127까지기 때문에 127 다음 숫자는 -128이 된다.
2. cNum2에 127이 나오냐면 cNum2에 -129를 넣었다. char의 크기는 -128 ~ 127 까지이다.
-128보다 적은 숫자를 넣었으므로 언더플로우 발생. 그래서 -128에서 그전숫자인 127이 나오게 되는것이다.