본문 바로가기

   
Programming/C#

식별자 생성, 형변환, 오버플로우

반응형

- 헝가리안 표기법 : 자료형의 표시를 접두어로..

ex) int num;

      int int num;

      bool bFlag;

C#) 인터페이스에서만 사용.. IHuman

 

 - 파스칼 표기법 : 각 단어의 첫글자를 대문자로..

 ex) studentname

       student_name

       StudentName

C#) 클래스명, 메서드명, 네임스페이스명, 구조체명 등..

 

 - 카멜 표기법 : 파스칼 동일.. 단 첫번째 문자는 소문자로 시작

 ex) studentName

 C#) 변수명

 

 형변환(Type Casting Operation)

 - 변수 = 데이터;

 -  **조건 왼쪽의 변수 타입과 오른쪽의 데이터타입은 동일!!

 - byte b1 = 256;//Error

 - int n1 = "홍길동";

 

좌우측의 데이터 타입이 달라질 경우...할일

 - 명시적(Explicit) 형변환

 - 암시적(Implicit) 형변환

 

암시적 형변환

 - 큰형 = 작은형

 - 별다른 표현없이 자동으로 발생

 - 100% 안전

 

명시적 형변환

 - 작은형 = 큰형

 - 반드시 표현을 사용해서 발생

 - ()연산자 사용

 - 경우에따라 성공 or 실패

 - Overflow / Underflow -> Overflow(오버플로우)

 - 명시적 형변환은 올바르게 처리될 수 있지만, 오버플로우가 발생할 가능성도 있다.!!

 - 오버플로우가 발생해도 에러발생이 일어나지가 않는다****

 

데이터 형태에따라 복사하는것엔 문제가 없다. 하지만 데이터 복사시에 큰범위 형태에서 작은 범위로 형변환을 적용시에 큰범위에서 작은 범위로 변환시 데이타 형태에 넘치지 않는한 형변환이 가능하다.

 

using System;

 

namespace Csharp

{

       class Ex09_Casting

       {

             public static void Main(string[] args)

             {

                    //작은형 숫자타입

                    //큰형 숫자타입

 

 

                    //암시적 형변환

                    // -큰형(공간) = 작은형(데이터)

 

                    byte b1 = 100;

                    short s1;

 

                    //(short)형변환

                    s1 = (short)b1;//복사 100% 성공 컴파일러 내부에서 (short)를 써준다.

 

                    Console.WriteLine(b1);

                    Console.WriteLine(s1);

             }

       }

}

 

 

using System;

 

namespace Csharp

{

       class Ex11_Casting

       {

             public static void Main(string[] args)

             {

                    //명시적 형변환

                    // - 작은형 = 큰형

 

                    byte b1;

                    short s1 = 300;

 

                    b1 = (byte)s1;//형변환 컴파일러는 문법만 검사한다. 한문장 문장마다 문법이 어긋난게 있는 없는지만 판단한다.

 

                    Console.WriteLine(b1);

                    Console.WriteLine(s1);

 

                    long l1 = 200000000000;//2백억

                    int n1;

 

                    n1 = (int)l1;

                    Console.WriteLine("원금 : " + l1);

                    Console.WriteLine("이체후 : " + n1);

                    //숫자 형변환시에는 비트 단위로 복사가 되기 때문에 첫번째 비트가 0이어서 -형태로 값이 출력된것을 확인할수 있다.2012-02-08

                   

             }

       }

}

 

  using System;

 

namespace Csharp

{

       // Ex11_Overflow.cs

       class Ex11_Overflow

       {

             public static void Main(string[] args)

             {

                    byte b1;

                    short s1 = 200;

 

                    checked

                    {

                           b1 = (byte)s1;

                           b1 = (byte)s1;

                           b1 = (byte)s1;

                    }

                    //형변환 -> 오버플로우

                    //1. 오버플로우를 에러로 처리X -> 강제로 에러가 나겠끔

                    //2. 에러처리

                    //검사가 많아질수록 좋지 않다.속도면에서 많이 떨어짐

                    b1 = checked((byte)s1);

 

                    Console.Write(s1);

                    Console.Write(b1);

             }

       }

}

 

using System;

 

namespace Csharp

{

       // Ex11_Overflow.cs

       class Ex11_Overflow

       {

             public static void Main(string[] args)

             {

                    byte b1;

                    short s1 = 200;

 

                    checked

                    {

                           b1 = (byte)s1;

                           b1 = (byte)s1;

                           b1 = (byte)s1;

                    }

                    //형변환 -> 오버플로우

                    //1. 오버플로우를 에러로 처리X -> 강제로 에러가 나겠끔

                    //2. 에러처리

                    //검사가 많아질수록 좋지 않다.속도면에서 많이 떨어짐

                    b1 = checked((byte)s1);

 

                    Console.Write(s1);

                    Console.Write(b1);

             }

       }

}

 

반응형