본문 바로가기

공부합시다

[JAVA] [연산자3] 연산자 우선순위, 비교연산자

자바에서는 계산하는 순서를 알아두는 것이 좋은데.. 헷갈리면 무조건 소괄호()를 이용하자!

아래의 연산자 우선순위 참고


 구분

연산자 

우선순위 

단항연산자 

++, --, +, -, !, ~ 

1

산술연산자

*,/,%

2

+,- 

3

(비트)시프트연산자

 <<, >> , >>>

4

비교연산자

==, !=, >, >=. <. <= 

 5 

비트연산자

%, ^,| 

6

논리연산자

&&, ||

7

삼항연산자

? :

8

대입연산자

=, +=, -=, /=, %=, ^=, &= 

9

* 사실 배우면서 정리한 것이므로 틀릴 수 있으니 이해 바랍니다 ^^


뭔가를 비교하기 위한 연산자 들이다.


== : rkqtdma

!= : 같지 않음

> : (왼쪽 값이) 큼

>= :(왼쪽 값이) 같거나 큼

< : (왼쪽 값이) 작음

<= : (왼쪽 값이) 같거나 작음


이건 뭐 따로 설명안해도 알듯...


논리 연산자

&& : AND 결합 (Conditional AND)  - 둘 다 true 일 때 만 true

|| : OR 결합 (Conditional OR) - 둘 중 하나만 true 여도 true, 둘다 false이면 false



비트연산자

& : 두 값이 모두 true일 경우에만 ture

| : 두 값이 모두 false일 경우에만 false

^ : 두 값이 서로 다를 경우 true, 모두 true이거나 모두 false 즉, 같으면 false


비트시프트연산자

>> : 오른쪽으로 1칸 이동

<< : 외쪽으로 1칸 이동




예제를 통해 좀더 구체적으로 알아봅시다~ ^^


예제1>




class OpLogic 

{

public static void main(String[] args) 

{

int num1 = 10, num2 =20; //선언하고 값입력하는 경우, 콤마로 여러개를 입력가능


boolean result1 = (num1 == 10 && num2 ==20);

boolean result2 = (num1 <=12 || num2 >=30);


System.out.println("num 1 == 10 그리고 bum2 == 20 :" + result1); 

//true, ==이 &&보다 우선순위가 높으므로 소괄호 불필요

System.out.println("num1 <=12 또는 num2 >=30 :" + result2); 

//true, <=, >=는 or보다 우서순위가 높으므로 소괄호 불필요

}

}





<예제2>



class OpLogic2 

{

public static void main(String[] args) 

{

int num1 = 0, num2 = 0;

boolean result;


result = (num1 += 10) < 0 && (num2 += 10) > 0;

        //&&는 앞에 논리연산이  false인 경우 무조건 false이므로 뒷쪽 연산을 안함

System.out.println("result =" + result); //false

System.out.println("num1 =" + num1 + ",num2 =" + num2); // 10, 10(?)

//그래서 num2는 0


result = (num1 += 10) > 0 || (num2 += 10) > 0; 

//||는 앞에 논리연산이  true인 경우 무조건 true이므로 뒷쪽 연산을 안함

System.out.println("result =" + result); //false

System.out.println("num1 =" + num1 + ",num2 =" + num2); // 20, 20(?)

//그래서 num2는 0

}

}




<예제3>



class BitOp 

{

public static void main(String[] args) 

{

byte n1 = 13; //int로 선언해도 됨 그러나..

byte n2 = 7; //byte는 1바이트, int는 4바이트.. 효율적이기 위해

int n3 = n1 & n2; // 13을 2진수로(1101), 7을 2진수로(111)

System.out.println(n3); //&인 경우 둘다 1인경우로 환산하면 2진수 101, 5(4*1+1*1)


n3 = n1 | n2;

System.out.println(n3); //15


n3 = n1 ^ n2;

System.out.println(n3); //10


}

}




<예제4>


class  BitShiftOp

{

public static void main(String[] args) 

{

System.out.println(2 << 1); //왼쪽으로 1칸 시프트(이동)하라

System.out.println(2 << 2); 

System.out.println(2 << 3);


System.out.println(8 >> 1); //오른쪽으로 1칸 시프트(이동)하라

System.out.println(8 >> 2);

System.out.println(8 >> 3);

}

}