사칙 연산 및 비트연산을 포함
+
(덧셈) -
(뺄셈) *
(곱셈) /
(나눗셈/몫) %
(나눗셈/나머지)
int a = 20;
int b = 10;
int c;
// 덧셈
c = a + b;
System.out.println(c); // 30
// 뺄셈
c = a - b;
System.out.println(c); // 10
// 곱셈
c = a * b;
System.out.println(c); // 200
// 나눗셈
c = a / b;
System.out.println(c); // 2
c = (float)a / b;
System.out.println(c); // 2.0
// 나눗셈 (나머지) = 나머지 연산
c = a % b;
System.out.println(c); // 0
// 우선 순위 연산
System.out.println(2 + 2 * 2); // 6
System.out.println((2 + 2) * 2); // 8
System.out.println(2 + (2 * 2)); // 6
피연산자를 비트(bit) 단위로 논리 연산을 할 때 사용하는 연산자
&
(AND) |
(OR) ^
(XOR)
또한, 비트 단위로 전체 비트를 왼쪽이나 오른쪽으로 이동시킬 때도 사용
<<
(left shift) >>
(right shift)
x << y
: 정수 x의 각 비트를 y만큼 왼쪽으로 이동(빈자리는 0으로 채움)x >> y
: 정수 x의 각 비트를 y만큼 오른쪽으로 이동(빈자리는 최상위 부호비트로 채움)x >>> y
: 정수 x의 각 비트를 y만큼 오른쪽으로 이동(빈자리는 0으로 채움)👍🏻 어디에 쓰는 놈잉고...?
x << y
: x * 2^yx >> y
: x / 2^y1 << n
: 2^n- 보통 빠르게 2^n 연산을 하고 싶을때 사용!
크고 작음과 같고 다름을 비교하여 참(true)/거짓(false) 값인 boolean 값을 출력
>
(초과) <
(미만) >=
(이상) <=
(이하) ==
(같다) !=
(다르다)
// 비교 연산자 (참이면 true, 거짓이면 false)
System.out.println(10 > 9); // 10 는 9 보다 크다 (참이면 true, 거짓이면 false)
System.out.println(10 >= 9); // 10 는 9 보다 크거나 같다 (true)
System.out.println(10 < 9); // 10 는 9 보다 작다 (false)
System.out.println(10 <= 9); // 10 는 9 보다 작거나 같다 (false)
System.out.println(10 == 10); // 10 는 10 와 같다 (true)
System.out.println(10 == 9); // 10 는 9 과 같다 (false)
System.out.println(10 != 10); // 10 는 10 와 같지 않다 (false)
System.out.println(10 != 9); // 10 는 9 과 같지 않다 (true)
그리고(AND)와 또는(OR) 으로 조건을 연결
&&
(AND) ||
(OR) !
(NOT)
// And 연산
System.out.println((5 > 3) && (3 > 1)); // 5 는 3 보다 크고, 3 은 1 보다 크다 (true)
System.out.println((5 > 3) && (3 < 1)); // 5 는 3 보다 크고, 3 은 1 보다 작다 (false)
// Or 연산
System.out.println((5 > 3) || (3 > 1)); // 5 는 3 보다 크거나, 3 은 1 보다 크다 (true)
System.out.println((5 > 3) || (3 < 1)); // 5 는 3 보다 크거나, 3 은 1 보다 작다 (true)
System.out.println((5 < 3) || (3 < 1)); // 5 는 3 보다 작거나, 3 은 1 보다 작다 (false)
// System.out.println(1 < 3 < 5); // 불가능한 코드
// Not 연산
System.out.println(!flag1); // false (flag1 값의 반대)
System.out.println(!flag3); // true (flag3 값의 반대)
System.out.println(!(5 == 5)); // false
System.out.println(!(5 == 3)); // true
변수를 바로 연산해서 변수에 저장하는 연산자
=
(기본 대입 연산자)
+=
-=
*=
/=
%=
(복합 대입 연산자)
++
—-
(대입 증감 연산자)
// 대입 연산자
int number = 10;
number = number + 2;
System.out.println(number); // 12
// 복합 대입 연산자
number = 10;
number += 2; // number = number + 2와 동일
System.out.println(number); // 12
number -= 2;
System.out.println(number); // 10
number *= 2;
System.out.println(number); // 20
number /= 2;
System.out.println(number); // 10
number %= 2;
System.out.println(number); // 0
// 대입 증감 연산자
int a = 10;
int b = 10;
int val = ++a + b--; // a 는 연산전에 +1, b 는 연산후에 -1
System.out.println(a); // 11
System.out.println(b); // 9
System.out.println(val); // 21
int c = a--; // c 에 a 값 대입 후 a-1 (즉, a=10, c=11)
int d = ++b; // b 값 +1 후에 d 에 대입 (즉, b=10, d=10)
int val = c-- * ++d; // c 는 연산후에 -1, d 는 연산전에 +1
System.out.println(a); // 10
System.out.println(b); // 10
System.out.println(c); // 11
System.out.println(d); // 10
System.out.println(val); // 11 * 11 = 121
🔥 대입 증감 연산자 주의할점!!
대입 증감 연산자는 연산자가 붙는 위치에 따라 전위 연산자, 후위 연산자라고 부르는데 이 두가지는 연산 방식이 다르다.
- 전위 연산자
++a
: 해당 줄에서 연산이 수행됨- 후위 연산자
a++
: 해당 줄 이후에 연산이 수행됨
괄호 안에 변환할 타입을 넣으면 피연산자의 타입이 변경됨
(type)
// 형변환 연산자
int intNumber = 93 + (int) 98.8; // 93 + 98
double doubleNumber = (double) 93 + 98.8; // 93.0 + 98.8
비교 연산의 결과값에 따라 응답할 값을 직접 지정할 수 있는 연산자
(조건) ? (참 결과) : (거짓 결과)
// 삼항 연산자
int x = 1;
int y = 9;
boolean b = (x == y) ? true : false;
System.out.println(b); // false
String s = (x != y) ? "정답" : "땡";
System.out.println(s); // 땡
int max = (x > y) ? x : y;
System.out.println(max); // 9
int min = (x < y) ? x : y;
System.out.println(min); // 1
피연산자가 조건에 명시된 클래스의 객체인지 비교하여 참/거짓을 응답
(객체) instance of (클래스)
📌 연산자 우선순위 : 산술 > 비교 > 논리 > 대입
// 연산자 우선순위
int x = 2;
int y = 9;
int z = 10;
boolean result = x < y && y < z; // <,> 비교연산자 계산 후 && 논리 연산자 계산
System.out.println(result); // true
result = x + 10 < y && y < z; // +10 산술연산자 계산 후 <,> 비교연산자 계산 후 && 논리 연산자 계산
System.out.println(result); // false
result = x + 2 * 3 > y; // 산술연산자 곱센 > 덧셈 순으로 계산 후 > 비교연산자 계산
System.out.println(result); // false (8>9)
result = (x + 2) * 3 > y; // 괄호안 덧셈 연산 후 괄호 밖 곱셈 계산 후 > 비교연산자 계산
System.out.println(result); // true (12>9)
연산 전에 피연산자의 타입을 일치시키는 것
int
보다 작은 short
타입이면 int
로 변환long
보다 작은 int
, short
타입이면 Long
으로 변환float
보다 작은 long
, int
, short
타입이면 float
으로 변환double
보다 작은 float
, long
, int
, short
타입이면 double
으로 변환// 산술변환
short x = 10;
int y = 20;
int z = x + y; // 결과값은 더 큰 표현타입인 int 타입의 변수로만 저장
long lx = 30L;
long lz = z + lx; // 결과값은 더 큰 표현타입인 long 타입의 변수로만 저장
float fx = x; // 결과값은 더 큰 표현타입인 float 타입의 변수로만 저장
float fy = y; // 결과값은 더 큰 표현타입인 float 타입의 변수로만 저장
float fz = z; // 결과값은 더 큰 표현타입인 float 타입의 변수로만 저장
🔗 스파르타코딩클럽 Java 문법 종합반