본문 바로가기
프로그래밍언어/Java

03-2. 연산자의 종류

by 스꼬맹이브로 2021. 1. 8.
728x90
반응형
SMALL

연산자는 필요로 하는 피연산자의 수에 따라 단항, 이항, 삼항 연산자로 구분

  • 부호 연산자와 증감 연산자는 피연산자 하나만을 요구하므로 단항 연산자
  • 조건 연산자는 조건식, A, B와 같이 3개의 피연산자가 필요하므로 삼항 연산자
  • 그 외의 연산자는 2개의 피연산자를 요구하므로 모두 이항 연산자

<단항 연산자>

단항 연산자 : 피연산자가 단 하나뿐인 연산

1. 부호 연산자(+,-)

  • 양수 및 음수를 표시하며, boolean 타입과 char 타입을 제외한 나머지 기본 타입에 사용 가능

  • +와 -는 산술 연산자이기도 하고 부호 연산자이기도 하며, 부호 연산자로 쓰일 때에는 하나의 피연산자만 필요함
  • 일반적으로 부호 연산자를 정수 및 실수 리터럴 앞에 붙여 양수 및 음수를 표현
  • 변수 앞에 사용할 경우 변수 값의 부호를 유지하거나 바꿈(변수의 부호를 바꿀 시 타입을 고려해야 함)
public class SignOperatorExample {
	public static void main(String[] args) {
		int x = -100;
		int result1 = +x;
		int result2 = -x;
		System.out.println("result1=" + result1);
		System.out.println("result2=" + result2);
		
		byte b = 100;
		//byte result3 = -b;  //컴파일 에러 
		int result3 = -b; 
		System.out.println("result3=" + result3);

	}
}

 

결과 :

2. 증감 연산자(++,--)

  • 변수의 값을 1 증가(++)시키거나 1 감소(--)시키는 연산자
  • boolean타입을 제외한 모든 기본 타입의 피연산자에 사용 가능

  • 증가 연산자(++) : 피연산자의 값에 1을 더해서 그 결과를 다시 피연산자에 저장
  • 감소 연산자(--) : 피연산자의 값에서 1을 뺀 후 그 결과를 다시 피연산자에 저장
  • 증가 연산자와 감소 연산자는 변수의 앞뒤 어디에든 올 수 있음
  • 연산식에서 증감 연산자만 사용된다면 증감 연산자의 위치는 상관없음
  • 연산식에서 다른 연산자와 함께 사용된다면 증감 연산자의 위치에 따라 연산식의 결과가 다르므로 주의해야 함
public class IncreaseDecreaseOperatorExample {
	public static void main(String[] args) {
		int x = 10;
		int y = 10;
		int z;
		
		System.out.println("-----------------------");
		x++;
		++x;
		System.out.println("x=" + x);		

		System.out.println("-----------------------");		
		y--;
		--y;
		System.out.println("y=" + y);		

		System.out.println("-----------------------");		
		z = x++;
		System.out.println("z=" + z);
		System.out.println("x=" + x);
		
		System.out.println("-----------------------");		
		z = ++x;
		System.out.println("z=" + z);
		System.out.println("x=" + x);
		
		System.out.println("-----------------------");				
		z = ++x + y++;
		System.out.println("z=" + z);
		System.out.println("x=" + x);
		System.out.println("y=" + y);
	}
}

 

결과 :

 * ++i와 i=i+1의 속도 차이는 없다.

3. 논리 부정 연산자(!)

  • 논리 부정 연산자는 true를 false로, false를 true로 변경하기 때문에 boolean타입에만 사용 가능

  • 주로 조건문과 제어문에서 조건식의 값을 부정하도록 해서 실행 흐름을 제어할 때 사용
  • 두 가지 상태(true/false)를 번갈아가며 변경하는 토글(toggle) 기능을 구현할 때도 사용
public class DenyLogicOperatorExample {
	public static void main(String[] args) {
		boolean play = true;
		System.out.println(play);

		play = !play;
		System.out.println(play);

		play = !play;
		System.out.println(play);
	}
}

결과 :

<이항 연산자>

이항 연산자

: 피연산자가 2개인 연산자로, 산술 연산자, 문자열 결합 연산자, 비교 연산자, 논리 연산자, 대입 연산자 등이 있음.

 

1. 산술 연산자(+,-,*,/,%)

  • 사칙연산과 나머지를 구하는 것까지 하여 총 5가지로 구성
  • boolean타입을 제외한 모든 기본 타입에 사용 가능

  • 피연산자가 byte, short, char 타입일 경우 모두 int타입으로 변환된 후에 연산 수행
  • 피연산자들이 모두 정수 타입이고 long타입이 포함되어 있을 경우, 모두 long타입으로 변환된 후 연산 수행
  • 피연산자 중 실수 타입(float, double)이 있을 경우, 허용 범위가 큰 실수 타입으로 변환된 후 연산 수행
public class ArithmeticOperatorExample {
	public static void main(String[] args) {
		int v1 = 5;
		int v2 = 2;
		
		int result1 = v1 + v2;
		System.out.println("result1=" + result1);
		
		int result2 = v1 - v2;
		System.out.println("result2=" + result2);
		
		int result3 = v1 * v2;
		System.out.println("result3=" + result3);
		
		int result4 = v1 / v2;
		System.out.println("result4=" + result4);
		
		int result5 = v1 % v2;
		System.out.println("result5=" + result5);
		
		double result6 = (double) v1 / v2;
		System.out.println("result6=" + result6);	
	}
}

 

결과 : 

<문자열 결합 연산자(+)>

문자열 결합 연산자(+)

: 문자열을 서로 결합하는 연산자

public class StringConcatExample {
	public static void main(String[] args) {
		String str1 = "JDK" + 6.0;
		String str2 = str1 + " 특징";
		System.out.println(str2);
		
		String str3 = "JDK" + 3 + 3.0; //문자열 다음으로 숫자가 오므로 모두 문자열 처리
		String str4 = 3 + 3.0 + "JDK"; //문자열 전에 숫자가 오므로 산술계한 후 문자열 처리
		System.out.println(str3);
		System.out.println(str4);		
	}
}

결과 :

<비교연산자(<,<=,>,>=,==,!=)>

비교 연산자 

: 피연산자의 대소 또는 동등을 비교해서 true/false를 산출

  • 대소 연산자는 boolean을 제외한 기본 타입에 사용 가능
  • 동등 연산자는 모든 타입에 사용 가능
  • 비교 연산자는 흐름 제어문인 조건문, 반복문에서 주로 이용되어 실행 흐름 제어

  * 참고 

 0.1 == 0.1f 하였을 때 false 산출

 그 이유는 실수의 저장 방식인 부동 소수점 방식이 0.1을 정확히 표현할 수 없기 때문

 0.1f는 0.1의 근사 값(0.10000000149011612)으로 표현됨.

 그러므로 피연산자를 모두 같은 타입으로 변환하여 비교하는 것이 좋음

 

<논리 연산자(&&,||,&,|,^,!)>

논리 연산자 

: 논리곱, 논리합, 배타적 논리합, 논리 부정 연산을 수행하며 boolean타입만 사용할 수 있음

  • &&와 &는 산출 결과는 같지만 연산 과정이 조금 다름(||와 |도 동일)
    • &&앞의 피연산자가 false라면 뒤의 피연산자를 평가하지 않고 바로 false 산출
    • &는 두 피연산자 모두를 평가해서 산출 

<대입 연산자(=, +=, -=, *=, /=, %=)>

대입연산자 

: 오른쪽 피연산자의 값을 왼쪽 피연산자인 변수에 저장하며,
 오른쪽 피연산자에는 리터럴 및 변수, 다른 연산식이 올 수 있음.

<삼항 연산자>

삼항 연산자(=조건 연산식)

 : 3개의 피연산자를 필요로 하는 연산자로? 앞의 조건식에 따라 콜론(:) 앞뒤의 피연산자가 선택

조건식을 연산하여 true가 나오면 삼항 연산자의 결과는 피연산자 2가 됨.

반면에 연산하여 false가 나오면 셜과는 피연산자 3이 됨.

public class ConditionalOperationExample {
	public static void main(String[] args) {
		int score = 85;
		char grade = (score > 90) ? 'A' : ((score > 80) ? 'B' : 'C');
		System.out.println(score + "점은 " + grade + "등급입니다.");
	}
}

결과 :

728x90
반응형
LIST

'프로그래밍언어 > Java' 카테고리의 다른 글

04-2. for문, while문, do-while문  (0) 2021.01.12
04-1. if문, switch문  (0) 2021.01.11
03-1. 연산자와 연산식  (0) 2021.01.05
02-4. 변수와 시스템 입출력  (0) 2021.01.04
02-3. 타입변환  (0) 2020.12.30