본문 바로가기

프로그래밍/Java

Java_연산자(1)

① 연산자의 종류

종류 연산자 설명
산술 연산자 + - * / % << >> 사칙 연산과 나머지 연산(%)
비교 연산자 > < >+ <+ == != 크고 작음과 같고 다름을 비교
논리 연산자 && || ! & \ ^ ~ '그리고(AND)'와 '또는(OR)'으로 조건을 연결
대입 연산자 = 우변의 값을 좌변에 저장
기타 (type) ?: instanceof 형변환 연산자, 삼항 연산자, instanceof연산자

 

② 연산자의 결합규칙

- 산술 > 비교 > 논리 > 대입, 대입은 제일 마지막에 수행된다.

- 단항(1) > 이항(2) > 삼항(3). 단항 연산자의 우선순위가 이항 연산자보다 높다.

- 단한 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽이다.

 

③ 증감연산자 ++와 --

- 증가 연산자(++) : 피연산자의 값을 1 증가시킨다.

  감소 연산자(--) : 피연산자의 값을 1 감소시킨다.

타입 설명 사용예
전위형 값이 참조되기 전에 증가시킨다. j=++i;
후위형 값이 참조된 후에 증가시킨다. j=i++;

- 증감 연산자가 포함된 식을 이해하기 어려울 때는 다음과 같이 증감 연산자를 따로 떼어내면

이해하기 쉬워진다. 

j = ++i;  //전위형 ++i;  //증가 후에
j = i;  //참조하여 대입
j = i++;  //후위형 j = i;  //참조하여 대입 후에
i++;  //증가

 

④ 형변환 연산자

- 형변환이란, 변수나 리터럴의 타입을 다른 타입으로 변환하는 것이다.

형변환 방법 : (타입)피연산자

 

class Ex3_5 {
 public static void main(String[] args) {
	doubld d= 85.4;
	int score = (int) d;
	System.out.println("score=" + score);
	System.out.println("d=" + d);
    }
}

결과
score=85
d=85.4

 

⑤ 자동 형변환

- 변수가 저장할 수 있는 값의 범위보다 더 큰 값을 저장하려는 경우에 형변환을 생략하면 에러가 발생한다.

float f = 1234;		//float f = (float)1234;에서 (float)가 생력됨

byte b= 1000;		//에러. byte타입의 범위를 벗어난 값의 대입
byte b=(byte)1000;	//가능. 그러나 값 손실이 발생해서 변수 b에는 -24가 저장됨.

- 표현범위가 좁은 타입에서 넓은 타입으로 형변환하는 경우에는 값 손실이 없으므로 

두 타입 중에서 표현범위가 더 넓은 쪽으로 형변환된다.

byte (1byte) → short (2byte) / char → int (4byte) → long (8byte) → float (4byte)→ double (8byte)

화살표 방향으로의 변환은 자동 형변환이 되며, 반대 방향으로의 변환은 반드시 형변환 연산자를 써야한다.

 

⑥ 사칙 연산자

class Ex3_6 {
	public static void main(String args[]) {
    	int a=10;
        int b=4;
        
        System.out.printf("%d / %d= %d%n", a, b, a / b);
        System.out.printf("%d / %f = %f%n", a, (float)b, a / (float)b);
     }
}
결과
10 / 4 = 2
10 / 4.000000 = 2.500000

나누기 연산자의 두 연산자가 모두 int 타입인 경우, 연산결과 역시 int 타입이다. 

그래서 올바른 연산결과를 얻기 위해서는 두 피연산자 중 어느 한 쪽을 실수형으로 형변환해야 한다.

 

⑦ 산술 변환

- 두 피연산자의 타입을 같게 일치시킨다. ( 보다 큰 타입으로 일치)

- 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다.

class Ex3_8{
	public static void main(String[] args) {
    		byte a=10;
            byte b=30;
            byte c= (byte)(a*b);	//byte c=a+b;와 같이 적으면 에러. 
            System.out.println(c);
      }
}
결과
44

- 크기가 작은 자료형의 변수를 큰 자료형의 변수에 저장할 때는 자동으로 형변환되지만, 

반대로 큰 자료형의 값을 작은 자료형의 변수에 저장하려면 명시적으로 형변환 연산자를 사용해서 변환해야 한다.

 

 

'프로그래밍 > Java' 카테고리의 다른 글

Java_배열(1)  (2) 2022.10.05
Java_조건문과 반복문(2)  (0) 2022.09.29
Java_조건문과 반복문(1)  (0) 2022.09.22
Java_연산자(2)  (0) 2022.09.14
Java_변수  (0) 2022.09.01