연산자는 쉬우니까 바로 넘어가자.
연산자란?
int num1 = 10;
int num2 = 5;
System.out.printin(numl + num2); // 더하기 연산
System.out.printin(num1 - num2); // 빼기 연산
System.out.printLn(num1 * num2): // 곱하기 연산
System.out.printLn(numl/ num2); // 나누기 연산
System.out.printLn(num1 응 num2); // 나머지 연산
나누기를 할 때 0으로 나누면 java.lang.ArithmeticException이 발생한다. 나누기의 분모가 되는 값 또는 변수의 값이 0되지 않도록 유의해서 코딩해야한다.
int num1 = 10;
int num2 = 5;
num1 += num2; // num1 = num1 + num2
System.out.println(num1);
num1 -= num2; // num1 = num1 - num2
System.out.println(num1);
num1 *= num2; // num1 = num1 * num2
System.out.println(num1);
num1 /= num2; // num1 = num1 / num2
System.out.println(num1);
num1 %= num2; // num1 = num1 % num2
System.out.println(num1);
계산을 한 후, 다음 계산을 할 때 num1과 num2, 두 변수의 값은 이전의 계산에 의해 변해 있을수 있다. 만약 원래의 값인 10과 5를 사용하고 싶다면 값을 초기화 시켜줘야 함.
== 는 두 값이 같은지, != 는 두 값이 같지 않은지를 확인하는 연산자.true 를 결과값으로 반환한다.int num1 = 10;
int num2 = 20;
int num3 = 10;
System.out.println(num1 > num2); // 10 > 20
System.out.println(num1 >= num3); // 10 >= 10
System.out.println(num1 < num2); // 10 < 20
System.out.println(num1 <= num2); // 10 <= 20
System.out.println(num1 == num3); // 10 == 10
System.out.println(num1 != num2); // 10 != 20
논리 연산자도 또한 조건을 만족하는지에 따라 결과값으로 true 와 false 를 반환한다.
boolean a = true;
boolean b = false;
System.out.println(a && b);
// &&는 두가지 모두 참일 경우에는 true를, 그렇지 않을 경우에는 false를 반환한다.
System.out.println(a || b);
// ||는 두가지 모두 거짓일 경우에는 false를, 그렇지 않을 경우에는 true를 반환한다.
System.out.println(!b);
// !는 피연산자의 논리값을 바꿉니다. true는 false로 , false는 true로 반환한다.
비트 연산자는 피연산자를 비트단위로 논리 연산한다. 피연산자를 이진수로 표현했을 때의 각 자리를 규칙에 따라 연산을 수행함.
아래 링크에서 추가적인 학습을 할 수 있다.
한국어: http://www.tcpschool.com/c/c_operator_bitwise
영어: https://en.wikipedia.org/wiki/Bitwise_operation
8.6.1 퀴즈 1
주어진 코드를 보고 출력 결과를 생각해보세요.
public class Main {
public static void main(Stringll args) {
int num1 = 10;
int num2 = 3;
boolean bool1 = true;
boolean bool2 = false;
num1 += numl;
num2 *= num1;
System.out. println (num1);
System.out-println (num2) ;
System.out.println(bool1 && bool2);
}
}
정답
20
60
false
| 우선순위 | 연산자 | 종류 / 예시 | 의미 | 예시 | 결과 |
|---|---|---|---|---|---|
| 1 | () , [] , . | 괄호, 배열 인덱스, 멤버 접근 | 가장 먼저 평가 | (a+b) | - |
| 2 | ++ , -- | 후위 증감 | 사용 후 증가/감소 | a++ | a=2 (a=2→3) |
| 3 | ++ , -- , + , - , ~ , ! | 전위 증감, 단항 +/-, 비트 NOT, 논리 NOT | 피연산자 먼저 연산 | ++a, !flag | a=3, true/false |
| 4 | * , / , % | 곱셈, 나눗셈, 나머지 | 산술 연산 | 6*3, 7%3 | 18, 1 |
| 5 | + , - | 덧셈, 뺄셈 | 산술 연산 | 5+2 | 7 |
| 6 | << , >> , >>> | 비트 시프트 | 왼/오른쪽 시프트 | 4<<1, 8>>2 | 8, 2 |
| 7 | < , <= , > , >= , instanceof | 관계 연산 | 비교 연산 | 3<5 | true |
| 8 | == , != | 동등 비교 | 값 비교 | 3==3 | true |
| 9 | & | 비트 AND | 같은 비트가 1일 때 1 | 6 & 3 | 2 |
| 10 | ^ | 비트 XOR | 두 비트 다를 때 1 | 6 ^ 3 | 5 |
| 11 | | | 비트 OR | 하나라도 1이면 1 | 6 | 3 | 7 |
| 12 | && | 논리 AND | 두 조건 모두 참일 때만 참 | (a>0)&&(b>0) | true |
| 13 | || | 논리 OR | 하나라도 참이면 참 | (a>0)||(b<0) | true |
| 14 | ?: | 삼항 조건 연산자 | 조건 ? 참 : 거짓 | (a>0)?1:0 | 1 |
| 15 | = , +=, -= , *= , /= , %= | 대입 / 복합 대입 | 오른쪽 값을 왼쪽에 대입 | a+=3 | a=a+3 |
int x = 7, y = 4, z = 1; boolean r2 = ((x+y) & z) > 0 && (y<<1) == 8;
x + y = 7 + 4 = 11(x + y) & z = 11 & 1 = 1011 & 0001 = 0001 = 1(1 > 0) → truey << 1 = 4 << 1 = 100 << 1 = 8(8 == 8) → truetrue && true → trueint m = 8, n = 3, p = 2; boolean r4 = (m >> 1 & n) > 0 || (p * 3) == 6;
m >> 1 = 8 >> 1 = 1000 >> 1 = 0100 = 4(m >> 1) & n = 4 & 3 = 100 & 011 = 000 = 0(0 > 0) → falsep * 3 = 2 * 3 = 6(6 == 6) → truefalse || true → true ✅int a = 4, b = 7, c = 1; int r5 = ((a | b) ^ c) & (b - a) + 2;
a | b = 4 | 7 = 100 | 111 = 111 = 7(a | b) ^ c = 7 ^ 1 = 111 ^ 001 = 110 = 6b - a = 7 - 4 = 36 & 3 = 110 & 011 = 010 = 22 + 2 = 4 ✅int a = 3, b = 6, c = 2; int r6 = a++ + b-- & c ^ 5;
연산자 우선순위: ++/-- (후위) → + → & → ^
a++ = 3 (a → 4)b-- = 6 (b → 5)a++ + b-- = 3 + 6 = 9(a++ + b--) & c = 9 & 2 = 1001 & 0010 = 0000 = 00 ^ 5 = 5 ✅int a = 5, b = 3, c = 2; boolean r9 = (a + b & c) > 1 && ((b ^ c) | a) < 10;
연산자 우선순위: + → & → ^ → | → 비교 → &&
(a + b) & c = 8 & 2 = 1000 & 0010 = 0000 = 0(0 > 1) → false