티스토리 뷰

Programming Language/JAVA

형변환(기본형)

광식'S Story 2009. 2. 25. 17:01

형 변환

프로모션(promotion) - 더 큰 자료형으로의 자동 변환 / 정보의 손실이 없다.

디모션(demotion) - 더 작은 자료형으로의 변환(명시) / 정보의 손실이 발생할 가능성이 있기 때문에 이것을 고려 해야 한다.

 

ex1)

/*
 * 자바의 기본 베이스가 유니 코드이기 때문에 한글로 클래스 이름을 만들거나.
 * 변수를 지정할수 있다.그러나 실무에서는 영어로 작성 하기 바라고..테스트 용으로
 * 사용하기 바란다.
 */

package javasouc;

public class 자동형변환 {
    public static void main(String[] args){
        // promotion 확대변화
        //byte형 변수 (1byte : 127까지 기억) a는 10을 가지며, b는 7을 가진다.
        byte a = 10, b = 7 ;
        int c;
       
        c = a + b; //오류  컴파일러에 의해서 8bit + 8bit 의 결과값 c를 16bit로
        // 자동 승격 시켜 버린다.
        // 자바에서는 32비트 이하 연산을 할 때 자료형들 끼리 연산을 수행한다.
        // 그런 행동으로 인해 32비트 이하의 자료형들이 32비트(4byte) 체제로 승격이
        // 일어 난다. 우린 이것을 promotion이라 한다. 교재 72페이지

        System.out.println("c의 값을 int형으로 바까야한다."+c);
       
        //Demotion 축소변화 - 데이터의 손실이 발생 하지 않는 범위 내에서 사용할 것
        byte d = (byte)(a + b);
        // 승격이 일어난 것
        // a + b를 더한 결과를 byte로 바뀌어야 하기 때문에 () 묶어 줘야한다.
        // byte d = (byte)a + b; // 이것 또한 오류다
        // a와 b를 더한 후에 byte로 변환을 해야 하는데 이것은 더하기 연산을
        // 수행하기 전에 a만 byte 변환하므로 (byte)로 명시한것이 무의미하다.

        // 이렇게 int형의 결과를 자원의 손실을 피하여 강등 시키는 것을
        // Demotion이라 한다.
        System.out.println("byte 타입의 d의 캐스팅 결과값 : "+d);
    }

}

 


ex2)

/*
 *shot(2byte)형 변수 c를 선언하면서 변수 a와 b를 더하기 연산 하여
 * 결과를 c에 대입한다. 하지만 여기서 자료들끼리의 연산만 일어나는 것이 아니라
 * 자료형끼리도 연산이 일어난다는 것에 주목해야 한다. 자료형 a + b가 아닌 단순히
 * 20이라는 상수값을 short형 c변수에 대입한다면 문제가 없겠지만 자바에서는 32bit 미만
 * ,즉 short형과 byte형끼리 연산이 일어나면 32bit로 승격(promotion)시켜 결과값이
 * 그냥 값이 아닌 32bit int형이 된다는 것을 잊지 말자.
 */

package javasouc;

public class OperEx2 {

    public static void main(String[] args){
       
        short a,b;
       
        a = b = 10;
       
    //    short c = (short)(a + b);
        short c = a + b;
       
        System.out.println("c 의 값 :" + c);
       
   /*
    *ErrMSG
    * E:\Source\JavaSouc\src\javasouc\OperEx2.java:18: possible loss of precision
    *    found   : int
    *    required: short
    *    short c = a + b;
    * 1 error
    */   
       
    }
}

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함