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) 라고 한다.



+ Recent posts