Backend/Java

[Java] Operator(연산자) 종류

Deeb 2021. 8. 26. 22:40

✍ 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

 

반응형