✍ Operator(연산자)
정의: 주어진 식을 계산하여 결과를 얻어내는 과정인 연산을 수행하는 기호
3 + 2 * 4
➡ *, + 는 산술 연산자
➡ 우선순위에 따라 * , + 순서대로 연산한다.
선 : * / %
// 후 : + -
✔ 연산자 우선순위 공부할 때 종류 먼저 파악하면 좋다.
참고) (자료형) : 강제형변환에서 사용한 것
ex) (int), (double)등
🔎 단항, 이항, 삼항?
연산자가 하나의 숫자에 영향을 끼치면 : 단항
연산자가 두개의 숫자에 영향을 끼치면 : 이항
연산자가 세개의 숫자나 변수에 영향을 끼치면 : 삼항
1. 증감연산자(++, --)
피연산자를 1 증가시키거나 1 감소시키는 연산자로,
연산자 우선순위에서 전위만 우선순위 2번째이고 후위연산은 우선순위 최하위이다.
1) 전위 연산 ++a (증가 후 대입)
- 먼저 1을 증가 or 감소 시킨 후 다른 연산을 수행 / 최우선으로 수행된다.
int num1 = 10;
int num2 = ++num1;
➡ num2 대입 연산이 이루어지기 전에 num1을 1 증가(10 -> 11)
2) 후위 연산 a-- (대입 후 증가)
- 다른 연산을 수행 후 먼저 1을 증가 or 감소 시킨 후 다른 연산을 수행 /다른 연산을 진행 후 마지막에 수행된다.
int num3 = 10;
int num4 = num3++;
➡ num4에 num3(10)을 대입한 후 num3를 1 증가(10 -> 11)
📝 전위 후위 연산자 예제
int a = 3;
int b = 5;
int c = a++ + --b;
// 3++ + --5
// 3++ + 4 //1. 전위 연산 2. 산술연산 3. 대입연산 4. 후위연산
// c = 7 //왜 c에 대입한 후에 증가하지 않는가?
// 최종적으로 a,b,c 의 값은?
// a == 4 (a는 c에 대입한 후에 증가)
// b == 4 (c에서 계산할때 전위연산이 이루어져서 4)
// c == 7
2. 산술 연산자 (+ - * / %)
우선순위
선 : * / %
후 : + -
/ : 나눴을 때 몫을 구하는 연산자
% : 나눴을 때 나머지를 구하는 연산자
📝산술 연산자 예제
int num = 5;
System.out.printf("%d / %d = %d\n", num, 3, num / 3);
System.out.printf("%d %% %d = %d\n", num, 3, num % 3);
➡ %%를 쓰는 이유: printf에서 %d, %f 등 이용해서 패턴을 지정하기 때문이다.
❗ error
: %문자를 단독으로 쓰면 에러 발생 ➡ %%두 개를 작성해야 '%'로 인식된다.
응용 : 배수나 짝수, 홀수 등
반복문 조건을 할 때도 응용할 수 있다.
3. 비교연산자 (== , !=, >, <, >=, <= )
- 비교 연산의 결과는 무조건 true / false (논리형)이다.
- 연산기호가 두 개 연달아 작성되는 형태일 경우 "=" 기호가 항상 오른쪽 (>=, <=)
➡ if, while 문 등에 사용할 수 있다.
✔ 초과의 반대 이하
✔ 미만의 반대 이상
📝비교 연산자 예제
int a = 10;
int b = 20;
System.out.println( a == b); // false
System.out.println( a != b); // true
System.out.println( !(a == b)); // true
System.out.println( (a == b) == false ); // true
int c = 4;
int d = 5;
System.out.println( c < d ); //true
System.out.println( c+1 < d ); //false
System.out.println( c+1 <= d ); //true
System.out.println( (++c != d) == (--c != d) ); //false
// 5 != 5 4 != 5 (뒤에서 c는 이미 5여서)
// false == true
// =>false
int num = 123;
System.out.println("num은 짝수인가? " + (num %2 == 0)); //false
System.out.println("num은 짝수인가? " + (num %2 != 1)); //false
System.out.println("num은 홀수인가? " + (num %2 == 1)); //true
System.out.println("num은 홀수인가? " + (num %2 != 1)); //false
4. 논리연산자(&&, ||)
&(엔퍼센트), | (버티컬 바)
&&(AND)
: 둘 다 true일 때만 true, 나머지는 false
그리고(~이고), ~면서, ~이면서, ~부터 ~까지, ~사이
||(OR)
: 둘 다 flase일 때만 false, 하나만 true여도 다 true
또는, ~거나, ~이거나
둘 중 우선순위는 && > ||
b값은 앞에 a값만 보고도 결과가 나온다.
불가능: 뒤의 값을 볼 필요없다. (이미 a의 값만으로도 결과가 나왔다는 의미)
가능 : a의 값 만으로는 알 수 없어서 b값도 봐야한다.
📝논리 연산자 예제
int a = 100;
// a는 100 이상이면서 짝수인가?
System.out.println( (a >= 100) && (a % 2 == 0) );
// 100이상 ~면서(and) 짝수
Scanner sc = new Scanner(System.in);
System.out.print("정수 하나 입력 : ");
int input = sc.nextInt(); //위에서 입력된 정수를 input에 대입
// 입력 받은 정수가 1 이상 100 이하인가?
// == input이 1에서 100 사이 정수인가? (사이 == and)
boolean result = (input >= 1) && (input <= 100); // 계산값이 참, 거짓으로 나오기때문에 불리언 변수에 대입
System.out.println("입력 받은 수는 1 이상, 100 이하인가? " + result);
// 입력 받은 수가 1 미만이거나 100 초과인가?
boolean result2 = input < 1 || input > 100;
System.out.println("입력 받은 수는 1 미만이거나, 100 초과인가? " + result2);
5. 삼항연산자 (조건식 ? 식1 : 식2)
조건식의 연산 결과가 true, false인 식 (비교, 논리, 논리 부정 연산자가 포함된 식)
조건식 결과가 true일 때 : 식 1 수행
조건식 결과가 false일 때 : 식 2 수행
📝 삼항 연산자 예제
Scanner sc = new Scanner(System.in);
System.out.print("정수 하나 입력 : ");
// 1. 입력값이 양수, 음수인지
String result = input >= 0 ? "양수" : "음수";
// 2. 0은 양수,음수도 아니기때문에 삼항 연산자의 중첩사용
String result = input > 0 ? "양수" : ( input == 0 ? "0" : "음수" );
✔ 대입 연산자와 복합 대입 연산자의 우선순위는 같다.
6. 대입 연산자 (=)
기호 오른쪽 연산을 모두 수행한 후 왼쪽 변수에 대입
📝 대입 연산자 예제
a == 11
a = a+4;
// a는 11로 값이 정해져 있으니 11+4 한 값을 a 에 대입
// 결과: 15
a = a+4;
// a는 위에서 15의 값이 되었으니 15+4로
// a의 최종값은 19이다.
7. 복합 대입 연산자
다른 연산자와 대입 연산자가 결합한 것으로 자기 자신과 연산 후 연산 결과를 자기 자신에게 누적 대입
+=
- 피연산자가 자신과 연산 후 결과를 다시 자신에게 대입
증감 연산자는 1씩 증가, 감소
복합대입 연산자는 원하는 만큼 증가, 감소, 곱, 나누기 가능
📝 복합 대입 연산자 예제
int a = 10;
a += 5; // a = a + 5;
System.out.println(a);
a -= 10; //a = 15 - 10
System.out.println(a); // 5
a *= 4; // a = 5 * 4
System.out.println(a); //20
a /= 3; // a = 20 / 3
System.out.println(a); // 6
a %= 5; // a = 6 % 5
System.out.println(a); // 1
package edu.kh.op.ex.OperatorExample
'Backend > Java' 카테고리의 다른 글
[Java] Array(배열)_3 (배열 복사) (0) | 2021.09.03 |
---|---|
[Java] 2차원 Array(배열) + 가변 배열/ 선언,할당,초기화 (0) | 2021.09.02 |
[Java] Array(배열)_String[] (null) (0) | 2021.09.02 |
[Java] Array(배열)_2 (초기화, Arrays 클래스, Arrays.toString) (0) | 2021.09.01 |
[Java] Array(배열)_기초1 (0) | 2021.08.31 |