Overflow

  • 데이터 형식의 크기를 넘어선 값을 담으면 발생하는 현상
    using static Console;  
    public static class IntegralTypes  
    {  
      private static void Main()  
      {   
          OverFlow();  
      }
      private static void OverFlow()  
      {  
          byte a = byte.MaxValue;  
          WriteLine($"MaxValue : {a}");  
          a = (byte)(a + 1);  
          WriteLine($"Overflow : {a}");  
      }
    }
    

  • 255 는 2진수로 변환 시 1111 1111
  • 1을 더하면 1 0000 0000이 됨
  • byte는 8bit 만 담을 수 있어, 넘쳐흐른(Overflow) 왼쪽의 1은 버리고, 오른쪽 0000 0000만 저장
  • 0000 00000이므로 Console에 0이 나오게 됨
  • 그 반대의 UnderFlow도 발생할 수 있음
    UnderFlow
    using static Console;  
    public static class IntegralTypes  
    {  
      private static void Main()  
      {   
          UnderFlow();  
      }
      private static void UnderFlow()  
      {  
          byte a = byte.MinValue;  
          WriteLine($"MinValue : {a}");  
          a = (byte)(a - 1);  
          WriteLine($"UnderFlow : {a}");  
      }
    }