연산자란?
· 식을 구성하는 기본 단위입니다.
연산식
· 연산자와 피연산자로 구성되어 있습니다.
y = x + 10; // 연산식
// 연산자 : = , +
// 피연산자 : y, x , 10
산술 연산자
산술 연산자의 종류
연산식 | 설명 | ||
피연산자 | + | 피연산자 | 덧셈 연산 |
피연산자 | - | 피연산자 | 뺄셈 연산 |
피연산자 | * | 피연산자 | 곱셈 연산 |
피연산자 | / | 피연산자 | 나눗셈 연산 |
피연산자 | % | 피연산자 | 나눗셈의 나머지를 산출하는 연산 |
나눗셈 연산
· 부동 소수점 방식때문에 정확한 계산을 위해서라면 나눗셈 연산에서는 실수를 사용하지 않고 정수를 사용하는 것이 좋습니다.
System.out.println( 10/3 ); // (정수형int / 정수형int) → 소수점 버린다. // 3
System.out.println( 10/3.0 ); // (정수형int / 실수형double) → 실수형 double 3.3333333333333335 최대한 값에 수렴
System.out.println( (double)10/3 ); // (실수형double / 정수형int) → 실수형 double 3.3333333333333335 최대한 값에 수렴
나머지 연산
· 나머지 연산을 활용하면 홀수 짝수를 구분할 수 있습니다.
System.out.println( 10%3 ); // 1
System.out.println( 24%5 ); // 4
System.out.println( 214%9 ); // 7
// 홀수짝수 구분하는 방법
// 어떤 숫자 %2 → 나머지 : 0 짝수다
// 나머지 : 1 홀수다
부호 연산자
· 부호 연산자는 변수의 부호를 유지하거나 변경합니다.
연산식 | 설명 | |
+ | 피연산자 | 피연산자의 부호 유지 |
- | 피연산자 | 피연산자의 부호 변경 |
예시)
10 + 20 = 30
10 - 5 = 5
10 -(-5) = 15
문자열 +연산
· 문자열에 +연산 시, 이어붙인 다음 해당 값이 문자열로 변환됩니다.
· 연산은 ()괄호가 아닌 이상, 앞에서 순서대로 진행됩니다.
· 숫자 + 숫자 + 문자열의 경우 숫자계산 이후 문자열이 붙습니다.
ex) 10 + 10 + "30" → 20 + "30" → 2030 (출력 시엔 2030으로 표시 되지만, 문자열의 형태로 변환된 상태입니다.)
· 문자열 뒤에 있는 숫자들은 모두 문자열이 됩니다.
ex) "10" + 20 + 30 → "102030"
대입 연산자
· 대입 연산자 = 를 사용하여 오른쪽에 있는 값을 왼쪽에 저장합니다.
복합 대입 연산자
· 정해진 연산을 수행한 후 결과를 저장합니다.
+=
ex) int x = 10;
x = x + 10;
x += 10;
-=
ex) money = money - 1000;
money -= 1000;
*=
ex) int a = 3;
a *= 5; // a = a * 5;
/=
ex) int a = 10;
a /= 2; // a = a /2;
%=
ex) int x = 111;
y = 13;
x = x % y;
x %= y; // 7
증감 연산자
· 숫자형 타입에 쓰입니다. ( int 타입에 거의 고정적으로 쓰임)
· 원본 변수 공간에 영향을 미칩니다.
· x++에서 ++는 현재 없다고 생각하고 증가시키는 계산을 다음 줄에 적용시킨다고 생각하면 편합니다.
연산식 | 설명 | |
++ | 피연산자 | 피연산자의 값을 1 증가시킴 |
-- | 피연산자 | 피연산자의 값을 1 감소시킴 |
피연산자 | ++ | 다른 연산을 수행한 후에 피연산자의 값을 1 증가시킴 |
피연산자 | -- | 다른 연산을 수행한 후에 피연산자의 값을 1 감소시킴 |
int a = 30;
int b = 25;
int c = 0;
System.out.println("a : " + a + " b : " + b + " c : " + c);
// a : 30 b : 25 c : 0
b++; //a : 30 b : 25 c : 0 // 다음 줄에 b+1
c++; //a : 30 b : 26 (b+1) c : 0 // 다음 줄에 c+1
--a; //a : 29 (a-1) b : 26 c : 1 (c+1)
System.out.println("a : " + a + " b : " + b + " c : " + c);
// a : 29 b : 26 c : 1
c = ++a; //a : 30 (a+1) b : 26 c : 30 (c=a)
System.out.println("a : " + a + " b : " + b + " c : " + c);
// a : 30 b : 26 c : 30
b= --a; //a : 29 b : 29 (b=a) c : 30
System.out.println("a : " + a + " b : " + b + " c : " + c);
// a : 29 b : 29 c : 30
c = ++a + --b; //a : 30 (a+1) b : 28 (b-1) c : 58 (a+b)
System.out.println("a : " + a + " b : " + b + " c : " + c);
// a : 30 b : 28 c : 58
c = c + a--; //a : 30 b : 28 c : 88 (c+a)// 다음 줄에 a-1
System.out.println("a : " + a + " b : " + b + " c : " + c);
// a : 29 (a-1) b : 28 c : 88
a = b - ++c; //a :-61 (b-c) b : 28 c : 89 (c+1)
System.out.println("a : " + a + " b : " + b + " c : " + c);
// a :-61 b : 28 c : 89
System.out.println("a : " + a++ + " b : " + b + " c : " + c); //System.out.println("a : " + (a+1) + " b : " + b + " c : " + c);
// a :-61 b : 28 c : 89 // 다음 줄에 a 는 -60 원본값에 영향 a = -60
// 출력값 다음부터 a의 원본값에 영향을 주는 a++를 풀어본다고 하면,
// 출력값 다음 줄에 a = a+1; 를 입력한 것과 같다.
비교 연산자
· 연산을 비교했을 때 참(true)과 거짓(false)을 구별하는 것입니다.
구분 | 연산식 | 설명 | ||
동등비교 | 피연산자 1 | == | 피연산자 2 | 두 피연자의 값이 같은지를 검사 |
피연산자 1 | != | 피연산자 2 | 두 피연산자의 값이 다른지를 검사 |
|
크기 비교 | 피연산자 1 | > | 피연산자 2 | 피연산자1이 큰지를 검사 |
피연산자 1 | >= | 피연산자 2 | 치연산자1이 크거나 같은지를 검사 |
|
피연산자 1 | < | 피연산자 2 | 피연산자1이 작은지를 검사 |
|
피연산자 1 | <= | 피연산자 2 | 피연산자1이 작거나 같은지를 검사 |
System.out.println( 10 == 10 ); // 참 true
System.out.println( 10 != 10 ); // 거짓 false
System.out.println( 100 < 95 ); // 거짓 false
boolean result1 = 95 > 10; // 95가 10보다 크다 O
System.out.println(result1); // true
boolean result2 = 10 <= 10; // 우측 연산결과 true
System.out.println(result2); // true
int a = 3;
int b = 2;
boolean result3 = a < b; //3이 2보다 작습니까? false
System.out.println(result3); // false
String의 비교
== 가 아닌 .equals("문자열") 로 사용합니다.
예시
String a = "a";
if (a.equals("a")) {
System.out.println("참");
} else {
System.out.println("거짓");
}
논리 연산자
구분 | 연산식 | 결과 | 설명 | ||
AND (논리곱) |
true | &&또는 & | true | true | 피연산자 모두가 true일 경우에만 연산 결과가 true |
true | false | false | |||
false | true | false | |||
false | false | false | |||
OR (논리합) |
true | ||또는 | | true | true | 피연산자 중 하나만 true이면 연산 결과는 true |
true | false | true | |||
false | true | true | |||
false | false | false | |||
XOR (배타적 논리합) |
true | ^ | true | false | 피연산자가 하나는 true이고 다른 하나가 false일 경우에만 연산 결과가 true |
true | false | true | |||
false | true | true | |||
false | false | false | |||
NOT (논리 부정) |
! | true | false | 피연산자의 논리값을 바꿈 | |
false | true |
int l1 = 5;
int r1 = 10;
int l2 = 10;
int r2 = 20;
boolean result6 = (l1 < r1); // 5 < 10 true
boolean result7 = (l1 < r1) && (l2 >= r2);
// 5 < 10 && 10 >= 20
// true && false
// false
boolean result8 = (l2 < r1) || (l1 > r2);
// true || false
// true
boolean result9 = !result8;
// !true → false
boolean result10 = !(l1 > r2);
// 5 > 20 false
// !false → true
※크기 비교 시 주의
· < 작다의 반대는 > 크다가 아니라 >= 크거나 같다
삼항(조건) 연산자
· 조건식을 비교해보고 참(true)면 A를 실행, 거짓(false)이면 B를 실행
조건식 ? A : B
// 시험 점수가 50점 미만이면 재수강
// 시험 점수가 50점 이상이면 통과
int score = 70;
String result;
result = (score >= 50)? "통과" : "재수강" ;
System.out.println(result);
result = (score < 50)? "재수강" : "통과" ;
System.out.println(result);
result = !(score >= 50)? "재수강" : "통과" ;
System.out.println(result); // "재수강" "통과"
중첩된 삼항 연산자
(조건식) ? 참 : 거짓;
(조건식) ? ((조건식) ? 참 : 거짓) : 거짓;
(조건식) ? 참 : ((조건식) ? 참 : 거짓);
(조건식) ? ((조건식) ? 참 : 거짓) : ((조건식) ? 참 : 거짓);
(조건식) ? 참 : ((조건식) ? 참 : ((조건식) ? 참 : ((조건식) ? 참 : 거짓)));
/*
시험 점수가 50점 미만이면 재수강
시험 점수가 50점 이상이면 통과긴 통과인데... 90점 이상이면 "장학금"
70 "통과"
95 "장학금"
시험 점수가 50점 미만이면 재수강... 20점 미만 "탈락"
45점 "재수강"
10점 "탈락"
*/
//(조건식) ? ((조건식) ? 참 : 거짓) : ((조건식) ? 참 : 거짓);
int score = 15;
String result;
result = (score >= 90) ? "장학금" : (score >= 50 ? "통과" : (score >= 20) ? "재수강" : "탈락");
System.out.println(result);