본문 바로가기
✨ Java/etc

자바(JAVA) - 자료형 변환 (byte, int, long, char, boolean) 연산

by 환풍 2023. 7. 6.
728x90
반응형

 

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package zon;
 
 
//Variable , Constant,  literal 구분할줄 알아야함.
//기본형(primitiveType)
//byte<short<int<long (이까지 정수) <float<double (이까지 실수)
//char 0 ~ 65535
public class Test {
 
    public static void main(String[] args) {
        int variable;  // variable은 지역 변수이다. 쓰레기 값이다.
        // variable += 10; 이렇게하면 에러난다.
        
        final int constantValue; // 더이상 변하지마, 즉, 상수이다.
        
        byte byteValue1= 127;
        byte byteValue2= 5;
        byte byteResult = (byteValue1 + byteValue2) > Byte.MAX_VALUE ?0:(byte)(byteValue1 + byteValue2);
        System.out.println("byteResult = " + byteResult);
        System.out.println(Byte.MAX_VALUE);
        
        //int 4바이트 long 8바이트
        int intValue=Integer.MAX_VALUE ; 
        // 여기서 +1 하면 Integer범위에서 벗어나기 때문에 쓰레기값이 된다.
        
        System.out.println("intValue = " + intValue );
        
        long intValue2=Integer.MAX_VALUE + 1l ; 
        // 자료형 int + long 하면 long으로 바뀌면서 계산하기 때문에 1l 을통해 long으로 계산된다.
        
        System.out.println("intValue2 = " + intValue2 );
        
        for(int i='a';  i<='z'; i++) {
            System.out.printf("%c=%d\t", (char)i,i);
        }
        System.out.println();
        
        float f = 20.5f;
        double d =f;
        f=(float)(d*f);
        System.out.println(f);
        
        //boolean booleanValue = (boolean)88; 
        // boolean은 논리형, 88은 자료형이다. 그래서 형변환도 안먹는다.
        
        //boolean booleanValue = 88==9;  이건 된다.
        
        //boolean booleanValue = !88==9; 얘는 연산 우선순위 때문에 안된다. 따라서
        //boolean booleanValue = !(88==9);  이렇게 바꿔주면 된다.
        
    }
 
}
 
cs

byte (1byte) < short (2byte) < int (4byte) < long (8byte) < float (4byte) < double (8byte)

 

 

1. byte 형변환

byte의 크기(Byte.MAX_VALUE)는 127까지이다. 따라서 byteValue1과 byteValue2를 더했을때 128 이상이 되면 쓰레기 값으로 0이 나오게 된다. 연산을 할때도 ( ) 안에 넣어서 연산을 하게 되면 자료형이 맞지 않으므로, 형변환을 해서 연산해주어야한다.

 

2. 자료형 Int와 Long

int는 4바이트, long은 8바이트 이므로, intValue2에서 연산을 할 때 1l 을 써준다면, 연산은 크기가 큰 long의 형태로 하기 때문에 int의 크기를 벗어나 연산이 가능한 것이다.

 

콘솔 결과

 

1. 자동(묵시적) 타입 변환

 - 프로그램 실행 도중에 자동적으로 타입 변환이 일어나는 것

 - 작은 크기를 가지는 타입이 큰 크기를 가지는 타입에 저장될 때 발생.

구분 : 메모리 크기

byte byteValue = 10;
int intValue = byteValue;  // 이 경우 byte는 1바이트, int는 4바이트이므로, 자동 타입 변환 발생.

 

2. 강제(명시적) 타입 변환

 - 큰 크기의 타입은 작은 크기의 타입으로 자동 타입 변환 불가.

 - 캐스팅(Casting)을 통해 타입 변환이 이루어짐.

캐스팅(Casting)이란? 

  : 강제적으로 큰 데이터 타입을 작은 데이터 타입으로 쪼개어서 저장하는 것.

int intValue = 1030;
byte byteValue = (byte)intValue; // 강제 타입 변환(캐스팅)

 

728x90
반응형

댓글