3+4 에서
3,4는 항, +는 연산자
그러면 자바에서의 연산자는?
항의 개수에 따라 단항, 이항, 삼항 연산자
우선순위 | 예시 | |
단항 연상자 | 1순위 | ++num |
이항 연산자 | 2순위 | num1+num2; |
삼항 연산자 | 3순위 | (5 > 3) ? 1 : 0; |
대입 연산자 =
변수에 값을 대입하는 연산자
이항 연산자 중 우선순위가 가장 낮음 (모든 연산을 끝낸 후 마지막 연산결과를 변수에 대입!)
int age = 24;
부호 연산자 +,-
음수 양수를 나타내는 단항 연산자로 사용 (+3, -3)
덧셈, 뺄셈에 쓰이는 이항 연산자이기도함
산술 연산자 +, -, *, /, %
사칙연산에 사용
사칙연산의 우선순위와 동일함 (%,/,* 1순위 , -+ 2순위)
+ | 더하기 | 5+3 |
- | 빼기 | 5-3 |
* | 곱하기 | 5*3 |
/ | 나누기의 몫 | 5/3 |
% | 나누기의 나머지 | 5%3 |
증가, 감소 연산자 ++, --
단항연산자
연산자 앞이나 뒤에서 사용
값을 1만큼 늘리거나 1만큼 줄이기에 사용
++ | 항의 값에 1 더함 | val = ++num; num값이 1 증가한 후 val변수에 대입 num이 5일때 실행하면 num은 6이 되고 val도 6이 된다. |
val = num++; val 변수에 기존 num값을 대입한 후 num값 1 증가 num이 5일때 실행하면 val은 5가되고 num은 6이 된다. |
||
-- | 항의 값에 1 뺌 | val= --num; num값이 1 감소한 후 val 변수에 대입 num이 5일때 실행하면 num =4, val =4 |
val= num--; val 변수에 기존 num값을 대입한 후 num값 1 감소 num이 5일때 실행하면 val=5, num=4 |
관계연산자 >,<, >=, <=, ==, !=
> | 왼쪽항이 크면 참, 아니면 거짓 | num > 3; |
< | 왼쪽항이 작으면 참, 아니면 거짓 | num < 3; |
>= | 왼쪽항이 오른쪽항 이상이면 참, 아니면 거짓 | num >= 3; |
<= | 왼쪽항이 오른쪽항 이하면 참, 아니면 거짓 | num <= 3; |
== | 두 항이 같으면 참, 아니면 거짓 | num == 3; |
!= | 두 항이 다르면 참, 아니면 거짓 | num !=3; |
논리 연산자 &&, ||, !
명제
두 명제가 모두 참이면 논리 곱은 참
하나만 참이면 논리 합은 참
참의 부정은 거짓, 거짓의 부정은 참
&& 논리곱 | 두 항이 모두 참일경우만 참, 그렇지 않으면 거짓 | boolean val = (5 > 3) && ( 5 > 2); 둘다 ture = true |
|| 논리합 | 한 항만 참이면 결과값은 참, 두 항이 거짓이면 거짓 | boolean val = (5 > 3) || ( 5 < 2); (5 > 3) ture = true |
! 부정 | 단항 연산자 참인 경우 거짓, 거짓인 경우 참으로 바꿈 |
boolean val = ! (5>3); |
value = ((num1 = num1 + 10) < 10) && (i = i + 2) < 10;
System.out.println(value);
System.out.println(i);
(num1 = num1 + 10) < 10) 가 false라 뒷 항은 실행되지 않음
i = 2
value = ((num1 = num1 + 10) > 10) || (i = i + 2) < 10;
System.out.println(value);
System.out.println(i);
(num1 = num1 + 10) > 10) 가 true기 때문에 이미 논리합 true으로 끝나서 마찬가지로 뒷 항은 실행되지 않음
i = 2
이렇게 두 항을 모두 실행하지 않더라도 결과 값을 알 수 있어 나머지 항이 실행 되지 않는것을
단락 회로 평가 (Short Circuit Evaluation SCE)
라고 한다!
프로그래밍을 할 때 예상한 실행결과와 다를 수 있으니 주의해야한다.
복합 대입 연산자
대입 연산자와 다른 연산자를 조합해 하나의 연산자처럼 사용하는 연산자
대입 연산자처럼 우선순위가 가장 낮은 연산자 (모든 연산을 끝낸 후 마지막 연산결과를 변수에 대입!)
+= | 두 항의 값을 더해서 왼쪽 항에 대입 | num1 +=2; num1 = num1 +2; |
-= | 왼쪽 항에서 오른쪽 항을 빼서 그 값을 왼쪽항에 대입 | num1 -=2; num1 = num1 - 2; |
*= | 두 항의 값을 곱해서 왼쪽 항에 대입 | num1 *=2; num1 = num1 * 2; |
/= | 왼쪽 항을 오른쪽항으로 나누어 그 몫을 왼쪽 항에 대입 | num1 /=2; num1 = num1 / 2; |
%= | 왼쪽 항을 오른쪽항으로 나누어 그 나머지를 왼쪽 항에 대입 | num1 %=2; num1 = num1 % 2; |
<<= | 비트를 왼쪽으로 이동하고, 그 값을 왼쪽 항에 대입 | num1 <<=2; num1 = num1 << 2; |
>>= | 비트를 오른쪽으로 이동하고, 그 값을 오른쪽 항에 대입 (왼쪽에 채워지는 비트값은 부호 비트와 동일) |
num1 >>=2; num1 = num1 >> 2; |
>>>= | 비트를 오른쪽으로 이동하고 그 값을 왼쪽 항에 대입 (왼쪽에 채워지는 비트 값은 0) |
num1 >>>=2; num1 = num1 >>> 2; |
&= | 두 항의 & 비트 연산 후 그 값을 왼쪽 항에 대입 | num1 &=2; num1 = num1 & 2; |
|= | 두 항의 | 비트 연산 후 그 값을 왼쪽 항에 대입 | num1 |=2; num1 = num1 | 2; |
^= | 두 항의 ^ 비트 연산 후 그 값을 왼쪽 항에 대입 | num1 ^=2; num1 = num1 ^2; |
조건 연산자
연산에 필요한 항의 개수가 세개인 삼항 연산자
주어진 조건식이 참인 경우와 거짓인 경우에 다른 결과값이 나온다.
조건식 ? 결과 1 : 결과 2; | 조건식 결과가 참이면 결과 1 거짓이면 결과 2가 선택 |
int num =(5>3) ? 10 : 20; (5>3)이 참이므로 num=10 |
// 10이 짝수인 경우에는 true 그렇지않으면 false를 출력하도록 만들기
num = 10;
boolean isEven;
isEven=num%2==0 ? true : false;
System.out.println(isEven);