최근 글
최근 댓글
블로그 이웃
번개애비의 라이프스톼일
char에서 오버플로우 되는 연산의 결과 본문
char는 기본적으로 -128~127 내의 숫자만 담을 수 있는 그릇입니다.
자료형 | 키워드 | 메모리 크기 | 값의 범위 |
![]() | ![]() | 1 Bytes | ![]() |
![]() | ![]() | 2 Bytes | ![]() |
![]() | 4 Bytes | ![]() ![]() | |
![]() | 4 Bytes | ![]() ![]() | |
![]() | ![]() | 1 Bytes | ![]() |
![]() | ![]() | 2 Bytes | ![]() |
![]() | 4 Bytes | ![]() | |
![]() | 4 Bytes | ![]() | |
![]() | ![]() | 4 Bytes | ![]() |
![]() | 8 Bytes | ![]() | |
![]() | ![]() | 0 Bytes | ![]() |
해당하는 숫자안에서만 놀면 다행인데,
연산결과 값이 해당하는 숫자를 넘어설때 (이를 오버플로우라고 합니다.)
완전히 엉뚱한 값이 나옵니다.
하지만, 그 값을 어느정도 예측이 가능합니다.
다음은 char를 이용한 덧셈연산 C 프로그램입니다.
//변수들을 char이라고 선언합니다.
char a, b, c;
//a변수에 70을 담습니다.
a=70;
//b변수에 80을 담습니다.
b=80;
//연산한 내용을 c변수에 담습니다.
c=a+b;
//연산한 c변수를 출력합니다.
prinf("%d", c);
이렇게 연산하게 되면 통상적으로 70+80=150 이 되어야 합니다만,
앞서 말했다시피 char는 127까지의 숫자만을 담습니다.
위 코드를 직접 실행해보면 -106이라는 쌩뚱맞은 숫자가 나오게 되는데
이는 실제 결과값 150가 오버플로우가 되어서 127-150=-23만큼 오버가 됩니다.
-23은 char 범위에서 다시 뒤로 돌아와 -128에서 한계단씩 올라갑니다.
-128+23=-105
여기서 오버플로우가 되고 양에서 음으로 전환됬기 때문에
1만큼 한계단더 진행하면 -106가 됩니다.
실제 C실행 결과 : http://codepad.org/nsi3rqVb
'IT' 카테고리의 다른 글
안드로이드에서 플래시재생이 안될때 (0) | 2016.06.21 |
---|---|
Artificial Intelligence (0) | 2016.04.25 |
웹에서 프로그래밍을 짜보자 - codepad (0) | 2016.04.21 |
리눅스 환경에서 윈도우 rdp 사용하기 (0) | 2016.03.31 |
GCC 설치시 필요한 의존성 라이브러리 목록 (0) | 2016.03.31 |
Comments