티스토리 뷰

JAVA

[Java] 연산자 및 연산자 우선순위

단미라이프 2022. 3. 9. 14:31
반응형

 

 

1. 연산자 우선순위

  • 식에 여러 개의 연산자가 있는 경우 우선순위가 높은 연산자를 먼저 처리한다.
  • 우선순위가 동일하면 왼쪽에서 오른쪽으로 처리한다.
높음

|
|
|
|
|
|
|
|
|
|
|
|
|
|
V

낮음
++(postfix), --(postfix) 증감 연산자(후위형)
+(양수부호), -(음수부호), (prefix)++, (prefix)--, ~, ! 양수부호, 음수부호, 증감 연산자(전위형), 부정, 
형변환(type casting)  
*, /, % 곱셈, 나눗셈, 나머지
+(덧셈), -(뺄셈) 덧셈, 뺄셈
<<, >>, >>> 비트단위 쉬프트 연산자
<>, <=, >=, instanceof 관계연산자
& (비트 AND) 비트 연산자
^ (비트 XOR) 비트 연산자
&& (논리 AND) 논리곱 연산자
|| (논리OR) 논리합 연산자
? : (조건) 조건 연산자
=, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=, >>>= 대입연산자, 할당 연산자

 

 


 

 

2. 산술연산자

  • +(덧셈), -(뺄셈), *(곱셈), /(나눗셈), %(나머지)
  • 나머지는 홀수인지 짝수인지 구분할 때 유용하게 사용
연산자 의미 결과
+ 더하기 25.1 + 3.8 28.9
- 빼기 3 - 5 -2
* 곱하기 3.5 * 4.0 14.0
/ 나누기 5/2 2
% 나머지 5%2 1

 

산술연산자 예제

 

import java.util.Scanner;

public class Ex01 {

	public static void main(String[] args) {

		int num1 = 10;
		int num2 = 7;

		System.out.println(num1 / (double)num2);		
		System.out.println(1.0 * num1 / num2);


	}

}

 

 

 


 

 

3. 증감연산자

  • 피연산자의 앞 또는 뒤에 붙어 값을 1 증가시키거나 1 감소시킨다.
  • 연산자가 변수 앞에 붙을 때 전위(prefix) 연산자라 부르고,
    연산자가 변수 뒤에 붙을 때 후위(postfix) 연산자라 부른다. 
연산자 내용 연산자 내용
a++ a를 1증가하고 증가 전의 값 반환 ++a a를 1증가하고 증가된 값 반환
a-- a를 1감소하고 감소 전의 값 반환 --a a를 1감소하고 감소된 값 반환

 

 

증간연산자 예제

 

public class Ex02 {

	public static void main(String[] args) {
		//증감연산자 예제
		
		System.out.println("==== 증감연산자 =====");
		int cnt = 10;
		System.out.println(cnt);	//10
		cnt++;
		System.out.println(cnt);	//11
		cnt--;
		System.out.println(cnt);	//10
		
		System.out.println(cnt++);	//10
		System.out.println(cnt);	//11
		System.out.println(++cnt);	//12

	}

}

 

public class Ex02 {

	public static void main(String[] args) {
		//증감연산자 예제2
		
		System.out.println("==== 증감연산자 =====");
		
		int i = 3;
		System.out.println(++i);
		System.out.println(i++);
		System.out.println(i);

	}

}

 

public class Ex02 {

	public static void main(String[] args) {
		//증감연산자 예제
		
		System.out.println("==== 증감연산자 =====");
		
		int hap = 0, j = 0, k = 0, l = 0;
		hap = ++j + k++ + ++l;
		
		System.out.println(hap + "," + j + "," + k + "," + l);
		
	}

}

 

 


 

 

4. 대입연산자

  • 연산자의 오른쪽 식의 결과를 변수에 대입한다
대입 연산자 내용 대입 연산자 내용
a = b  b의 값을 a에 대입 a &= b a = a & b와 동일
a += b a = a + b와 동일 a ^= b a = a ^ b와 동일
a -= b a = a - b와 동일 a |= b a = a | b와 동일
a *= b a = a * b와 동일 a <<= b a = a << b와 동일
a /= b a = a / b와 동일 a >>= b a = a >> b와 동일
a %= b a = a % b와 동일 a >>>= b a = a >>> b와 동일

 

대입연산자 예제

 

public class Ex03 {

	public static void main(String[] args) {
		// 대입 연산자 예제
		
		int a = 3, b = 3, c = 3;
		
		a += 3;	// a = a+3 =6
		b *= 3;	// b = b*3 =6
		c %= 2;	// c = c%2 =6
		
		System.out.println("a=" + a + ", b=" + b + ", c=" + c);

	}

}

 

 

증감연산자와 대입연산자 예제

 

public class Ex03 {

	public static void main(String[] args) {

		int a = 3, b = 4, c = 5, d = 5;
		
		a += 6 + --b;
		
		d *= 7 - c++;
		
		System.out.println("a=" + a + ", b=" + b +", c=" + c + ", d=" + d);

	}

}

 

 


 

 

5. 비교연산자와 논리연산자

  • 비교연산자는 두 개의 피연산자를 비교하여 true 또는 false의 논리 값을 내는 연산자
  • 논리연산자는 논리 값을 대상으로 AND, OR, XOR, NOT의 논리 연산을 하여 true 또는 false의 논리 값을 내는 연산자
연산자 내용 예제 결과
a < b a가 b보다 작으면 true 3<5 ture
a > b a가 b보다 크면 true 3>5 false
a <= b a가 b보다 작거나 같으면 true 1<=0 false
a >= b a가 b보다 크거나 같으면true 10>=10 ture
a == b a가 b보다 같으면 true 1==3 false
a != b a가 b보다 같지 않으면 true 1!=3 ture

 

연산자 내용 예제 결과
!a a가 true 이면 false, false이면 true !(3<5) false
a || b a와 b의 OR 연산
a와 b 모두 false인 경우에만 false
(3>5)||(1==1) true
a && b a와 b의 AND 연산
a와 b 모두 true인 경우에만 true
(3<5)&&(1==1) true
a ^ b a와 b의 XOR 연산
a와 b 가 서로 다를 때 true
(3>5)^(1==1) true

 

 


 

 

6. 삼항연산자

condition ? opr1 : opr2
(조건문)?(실행문1):(실행문2)
  • 3개의 피 연산자로 구성되어 삼항연산자라한다.
  • 앞의 조건문이 true이면 첫번째 결과값(opr1)이 되고, false이면 두번째 결과 값(opr2)이 된다.

 

삼항연산자 예제

 

import java.util.Scanner;

public class Ex04 {
	public static void main(String[] args) {
		//두 수의 차 구하기
	    Scanner scan = new Scanner(System.in);
	    
	    System.out.println("첫 번째 정수 입력 : ");
	    int num1 = scan.nextInt();
	    
	    System.out.println("두 번째 정수 입력 : ");
	    int num2 = scan.nextInt();
	    
	    int result = num1<num2 ? num2 - num1 : num1 - num2;
	    
	    System.out.println("두 수의 차 : " + result);
	}
	
}

 

 


 

 

7. 비트연산자

비트란?

 

  • 2진수의 한자리를 비트(bit)라 하고, 8개의 비트를 바이트(byte)라 한다.
  • 예를 들어, 십진수 10을 바이트로 표현하면 00001010이다. 
 0 0 0 0 1 0 1 0  ⇒ 바이트

비트

 

비트 논리연산

 

  • 피연산자의 각 비트끼리 AND, OR, XOR, NOR의 논리연산을 한다.
연산자 별칭 내용 예제
a & b

AND 연산 두 비트 모두 1이면 1, 그렇지 않으면 0 & 01101010
11001101
결과 01001000
a | b

OR 연산 두 비트 모두 0이면 0, 그렇지 않으면 1 | 01101010
11001101
결과 11101111
a ^ b

XOR 연산 두 비트가 다르면 1, 같으면 0 ^ 01101010
11001101
결과 10100111
~ a

NOT 연산 1을 0으로, 0을 1로 변환 ~ 01101010
결과 10010101

 

 

비트 시프트연산

 

  • 새로운 비트를 오른쪽이나 왼쪽 끝에 삽입하면서 비트의 자리를 이동시키는 연산
시프트 연산자 내용
a >> b a의 각 비트를 오른쪽으로 b번 시프트한다.
최상위 비트의 빈자리는 시프트 전의 최상위 비트로 다시 채운다.
a >>> b a의 각 비트를 오른쪽으로 b번 시프트한다.
최상위 비트의 빈자리는 항상 0으로 채운다
a << b a의 각 비트를 왼쪽으로 b번 시프트한다.
최하위 비트의 빈자리는 항상 0으로 채운다.

 

 

  • 비트 시프트연산 예제
byte a = 20;	//20
byte b = (byte)(a >> 2);	//5
a 0 0 0 1 0 1 0 0
   0 
최상위 비트로 채움
0 0 0 1 0 1 0
b  0 
최상위 비트로 채움
0 0 0 0 1 0 1

 

byte a = 20;	//20
byte b = (byte)(a >>> 2);	//5
a 0 0 0 1 0 1 0 0
   0 
빈자리는 0으로 채움
0 0 0 1 0 1 0
b  0 
빈자리는 0으로 채움
0 0 0 0 1 0 1

 

 

byte a = 5;	//5
byte b = (byte)(a<<2);	//20
a 0 0 0 0 0 1 0 1
  0 0 0 0 1 0 1  0 
빈자리는 0으로 채움
b 0 0 0 1 0 1 0  0 
빈자리는 0으로 채움

 

 

 

 

반응형
댓글
반응형
공지사항