overflow 와 underflow 에 대하여..
고찰....
char 형 = 1byte (8bit) 로 표현할 수 있는 unsigned 숫자의 범위는
-128 ~ 0 ~ 127
이다.. 왜냐하면..
2진수로 표현시 0 과 1 .. 2가지의 경우로 표현하는 방법이 있으므로..
|
|
|
|
|
|
|
|
0 또는 1 |
0 또는 1 |
0 또는 1 |
0 또는 1 |
0 또는 1 |
0 또는 1 |
0 또는 1 |
0 또는 1 |
= 총 256 가지의 경우의 수... 가 생기며
(unsigned 라고 가정하면) 이 256가지의 경우의 수로 [음수] [0] [양수] 로 표현할 수 있으므로
[-128~0~+127] 과 같은 범위의 수로 표현할 수가 있는 것이다.
이것이 이해가 안된다면.. 경우의 수 구하기를 복습하고 이해해보도록 하자.
=======================그렇다면=======================
를 2진수로 변환해보자
| |||||||
0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
---- ---- ---- ---- ---- ----
6 3 3 1 1 5 7 3 1
따라서,
=
[Overflow]
이 데이터가 들어있는 상황에서 +1 을 하게 될 경우
0111 1111
+ 0000 0001
-------------------
1000 0000 이 되고,
10진수로 변환했을 때 -> 이라는 , 전혀 이상한 수가 되어버리고 만다
그 이유는, 맨 앞의 비트는 MSB (most significant bit) '최상위비트'라 해서
이 자리에 1이 들어올 경우
1000 0000
컴퓨터는 음수로 인식해버리기 때문이다.
이를 오버플로우 (Overflow) 라고 한다.
[Underflow]
char형(8bit) 데이터 ..
음수의 표현 중에 가장 낮은 수인,,
가 들어있는 상황에서,
(-128)+( -1) = -129 를 만들어보겠다고.. 가정하면 어떻게 되는지 보자.
1000 0000 <<-128
+ 1111 1111 <<-1
------------------------
1 0111 1111
읭?
위의 1은 저장할 공간이 없으므로 버려지고, 결국 남은
=
즉, -129를 만들어보겠다고 넣은 수 때문에..
+127.. 양수를 만들어버렸다..
이를 언더플로우(Underflow) 라고 한다.
'C언어 기초 > 01주차' 카테고리의 다른 글
난수 생성 코드작성 해보기 (0) | 2017.02.08 |
---|---|
리눅스 내 한글사용을 위한 패치 (0) | 2017.02.08 |
리눅스 사용 - 기초문법 과 vi 사용하기 (0) | 2017.02.08 |
변수에 대하여.. 선언시 규칙 (0) | 2017.02.03 |
데이터타입 (0) | 2017.02.02 |