자바에서는 계산하는 순서를 알아두는 것이 좋은데.. 헷갈리면 무조건 소괄호()를 이용하자!
아래의 연산자 우선순위 참고
구분 |
연산자 |
우선순위 |
단항연산자 |
++, --, +, -, !, ~ |
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);
}
}
'공부합시다' 카테고리의 다른 글
[JAVA] 생성자 (0) | 2015.05.07 |
---|---|
[자바문법] 예제: 메소드, return, 구구단 (0) | 2015.05.07 |
[JAVA] break문, continue문 (0) | 2015.05.06 |
[JAVA] 반복문 - for, while, do-while (0) | 2015.05.06 |
[JAVA] 조건문 - if, switch (0) | 2015.05.06 |
[JAVA] [연산자2] 단항연산자, 삼항연산자 (0) | 2015.05.05 |
[JAVA] [연산자1] 산술연산자, 대입연산자 (0) | 2015.05.05 |
[JAVA] 자바의 자료형 (0) | 2015.05.05 |
[자바문법] 기본자료형 - short, int, 8진수, 16진의 표현 (0) | 2015.05.05 |
[자바문법] 변수의 사용 (UseVriable) (0) | 2015.05.05 |