정리/Java

자바의 정석 25~27강 증감 부호 형변환 사칙연산자, 자동형변환, 산술변환

민발자 2023. 4. 27. 21:01
728x90

자바의 정석 기초편(2020최신)

ch 3-5,6 증감 연산자, 부호 연산자

 

1. 증감연산자

증가 : 피연산자의 값을 1 증가

감소 : 피연산자의 값을 1 감소

전위형 참조되기 전 증가 ++i
후위형 참조된 후 증가 i++

 

2. 부호 연산자

- 는 피연산자 부호 반대호 변경

+ 아무것도 안함


 

 

ch3-7,8 형변환 연산자

 

1. 형변환

변수 또는 상수의 타입을 다른 타입으로 변환

(타입)피연산자

변환 수식 결과
int → char (char)65 'A'
char → int (int)'A' 65
float  int (int)1.6f 1
int float (float)10 10.0f

 

문자는 유니코드 문자표에 의해 int로 변환

2. 자동 형변환

값을 범위가 더 큰 타입에 저장할 때, 값손실이 없을 때 컴파일러가 자동으로 형변환

float에 int를 저장하는 경우 가능

int에 float를 저장하는 경우 값손실이 일어나 자동 형변환 불가

값손실 예시
기존값을 최대한 보존할 수 있는 타입으로 자동 형변환

public static void main(String[] args) {
		byte b = 100;
		// byte b = (byte)100;
		// 100은 리터럴이고 byte타입의 범위(-128~127)의 값이기 떄문에 자동 형변환
		
		int i = 100;
		// byte b2 = i;
		// i라는 변수를 넣어주면 byte 범위에 있더라도 값이 변할수있기 때문에 자동형변환 불가
		byte b2 = (byte)i;
	}

 


 

ch 3-9,10 사칙 연산자, 산술 변환

 

1. 사칙 연산자

값 손실이 있으면 형변환 해주기

 

2. 산술 변환

연산 전에 피연산자의 타입을 일치시키는 것

1) 두 피연산자의 타입을 같에 일치(값손실을 최소화하기 위해 큰타입으로)

long + int → long + long = long

float + int  float + float = float

double + float   double + double = double

2) 피연산자의 타입이 int보다 작은 타입이면 int로 변환

byte + short int + int = int

char + short  int + int = int

public static void main(String args[]) { 
		char ca = '2';
		char cb = '0';
		System.out.println(ca-cb);
		// 2 = 50 0 = 48 -> 50-48
		// 문자에서 숫자로 변경할 때 '2' -'0'을 빼는 이유
        
        
        int a = 1_000_000;    // 1,000,000   1백만 10의 6제곱
		int b = 2_000_000;    // 2,000,000   2백만 10의 6제곱

		long c = a * b;       
		System.out.println("현변환 전 " + c);
		// a * b = 2,000,000,000,000 ? 10의 12제곱
		// int의 범위는 10의 9제곱 오버플로우 발생
		// int * int = int

		long d = (long)a * (long)b;       
		System.out.println("형변환 후 " + d);
	}

 

 

 

 

728x90