JAVA

혼공자3.연산자(단항,이항,삼항(조건연산식))와 연산식

나는나는용 2023. 2. 20. 19:03
728x90

3. 연산자

3-1. 연산자와 연산식

연산: 프로그램에서 데이터를 처리하여 결과를 산출하는 것.
연산자: 연산에 사용되는 표시나 기호.
피연산자: 연산자와 함께 연산되는 데이터.
연산식: 연산자와 피연산자를 이용하여 연산의 과정을 기술한 것.

연산자의 종류

연산자별로 산출되는 값의 타입이 다름.

  • 산술 연산자: 숫자 타입의 결과
  • 비교 연산자: 논리 타입의 결과

연산식
반드시 하나의 값을 산출함.
값 대신 연산식을 사용할 수 있음.
다른 연산식의 피연산자 위치에 올 수 있음.

연산의 방향과 우선순위

연산자마다 연산의 방향과 우선순위가 다름.
 괄호()를 사용하여 먼저 처리할 연산식을 묶어주자.

  • 단항, 이항, 삼항 연산자 순으로 우선순위를 가짐.
  • 산술, 비교, 논리, 대입 연산자 순으로 우선순위를 가짐.
  • 단항, 부호, 대입 연산자를 제외한 모든 연산의 방향은 왼➔오.
  • 복잡한 연산식에는 괄호() 사용 권장.

3-2. 연산자의 종류

  • 단항 연산자: 부호 연산자.
  • 이항 연산자: 부호,조건 연산자 제외.
    삼항 연산자: 조건 연산자.

단항 연산자

피연산자가 단 하나.

  • 부호연산자( +, - )
    boolean, char제외 나머지 기본 타입에 사용 가능.
    정수 및 실수 리터럴 앞에 붙어 '양수 / 음수' 를 표현.
    정수 및 실수 변수 앞에 붙어 변수의 부호를 유지 / 변경.
    연산 결과는 int형.
package sec02.exam01;
public class SignOperatorExample {
	public static void main(String[] args) {
		//int 타입 부호 연산
		int x=-100;
		int result1= +x;
		int result2= -x;
		System.out.println("result1= " + result1);
		System.out.println("result2= "+ result2);
		//byte 타입 부호 연산
		byte b = 100;
		//byte result3= -b;		//부호연산시 int형으로 바뀜.
		int result3 = -b;
		System.out.println("result3= "+ result3);
	}
}

실행결과


  • 증감연산자( ++, -- )
    boolean 제외 나머지 기본 타입에 사용 가능.
    ++a : 다른 연산 수행 , a값 1 증가.
    −−a : 다른 연산 수행 , a값 1 감소.
    a++ : 다른 연산 수행 , a값 1 증가.
    a−− : 다른 연산 수행 , a값 1 감소.
package sec02.exam02;
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++;			//z에 x먼저 대입한 후, x 1증가.
		System.out.println("z= " + z);
		System.out.println("x= " + x);
		System.out.println("------------------------");
		z= ++x;			//x 1증가한 후, z에 x대입.
		System.out.println("z= " + z);
		System.out.println("x= " + x);
		System.out.println("------------------------");
		z= ++x + y++;	//x 1증가한 후 y와 더해 z에 대입한 후, y 1증가.
		System.out.println("z= " + z);
		System.out.println("x= " + x);
		System.out.println("y= " + y);
	}
}

실행결과

+) ++i  i=i+1의 연산 속도는 같다.


  • 논리 부정 연산자( ! )
    boolean에만 사용 가능.
    !a : a가 true면 false를, false면 true를 산출.
    조건문과 제어문에서 조건식의 값을 부정하여 실행 흐름 제어.
    true / false 를 번갈아가며 변경하는 토글 기능에서도 사용.
package sec02.exam03;
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개.

  • 산술 연산자(+, -, *, /, %)
    boolean 제외 나머지 기본 타입에 사용 가능.
    덧셈, 뺄셈, 곱셈, 나눈쎔, 나머지
    - 특징
    - 피연산자들이 byte, short, char : 모두 int 변환된 후 연산.
    - 피연산자들이 모두 정수, long 포함 : 모두 long 변환된 후 연산.
    - 피연산자 중 실수 존재 : 허용 범위 큰 실수 타입으로 변환된 후 연산.
    여러 산술 연산
package sec02.exam04;
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);
	}
}

실행결과


char타입 산술연산

package sec02.exam05;
public class CharOperationExample {
	public static void main(String[] args) {
		char c1='A'+1;
		char c2='A';
		//char c3 = c2 + 1;
		//c2는 char변수이므로 산술연산시 int로 변환되어, 연산결과 c3는 int형이어야 함.
		System.out.println("c1: " + c1);
		System.out.println("c2: " + c2);
		//System.out.println("c3: " + c3);
	}
}

실행결과

  • 문자열 결합 연산자( + )
    피연산자 중 한쪽이 문자열이면 다른 피연산자를 문자열로 변환하고 서로 결합.
    순서에 따라 다른 문자열 결합 연산자 결과
package sec02.exam06;
public class StringConcarExample {
	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 제외 나머지 기본 타입에 사용 가능.
    -동등: 모든 타입에 사용 가능.
    피연산자가 char형이면 유니코드 값으로 비교 연산 수행.
package sec02.exam07;
public class CompareOperatorExample {
	public static void main(String[] args) {
		int num1 = 10;
		int num2 = 10;
		boolean result1 = (num1 == num2);
		boolean result2 = (num1 != num2);
		boolean result3 = (num1 <= num2);
		System.out.println("result1= " + result1);
		System.out.println("result2= " + result2);
		System.out.println("result3= " + result3);
		//char형
		char char1 = 'A';
		char char2 = 'B';
		boolean result4 = (char1 <= char2);
		System.out.println("result4= " + result4);
	}
}

실행결과


+) 비교 연산에서도 연산 수행 전 피연산자 타입을 일치시킨다.

'A' == 65		//65 == 65 , true
3 == 3.0		//3.0 == 3.0 , true
0.1 == 0.1f 	//false

비교연산자 형변환 후 연산

package sec02.exam08;
public class CompareOperatorExample2 {
	public static void main(String[] args) {
		int v2 = 1;
		double v3 = 1.0;
		System.out.println(v2 == v3);
		double v4 = 0.1;
		float v5 = 0.1f;
		System.out.println(v4 == v5);
		System.out.println((float)v2 == v3);
	}
}

실행결과


+) String 변수 비교
보충 게시글 확인

  • 논리 연산자( &&, ||, &, |, ^, ! )
    논리곱, 논리합, 배타적 논리합, 논리 부정
    boolean만 사용 가능.
    흐름 제어문(조건,반복문)등에서 주로 이용됨.
package sec02.exam09;
public class LogicalOperatorExample {
	public static void main(String[] args) {
		int charCode = 'A';
		if( (charCode>=65) & (charCode<=90) ) {
			System.out.println("대문자군요");
		}
		if( (charCode>=97) && (charCode<=122) ) {
			System.out.println("소문자군요");
		}
		if( !(charCode<48) && !(charCode>57) ) {
			System.out.println("0~9 숫자군요");
		}
		int value=6;
		if( (value%2==0) | (value%3==0) ) {
			System.out.println("2 또는 3의 배수군요");
		}
		if( (value%2==0) || (value%3==0) ) {
			System.out.println("2 또는 3의 배수군요");
		}
	}
}

실행결과

  • 대입 연산자( =, +=, -=, *=, /=, %= )
    오른쪽 피연산자 값을 왼쪽 피연산자(변수)에 저장.
    가장 낮은 연산 순위.
    -단순 대입 연산자
    -복합 대입 연산자
package sec02.exam10;
public class AssignmentOperatorExample {
	public static void main(String[] args) {
		int result = 0;
		result += 10;
		System.out.println("result= " + result);
		result -= 5;
		System.out.println("result= " + result);
		result *= 3;
		System.out.println("result= " + result);
		result /= 5;
		System.out.println("result= " + result);
		result %= 3;
		System.out.println("result= " + result);
	}
}

실행결과

삼항 연산자

( ?: ) 피연산자 3개.
(물음표?) 앞의 조건식에 따라 (콜론:) 앞뒤의 피연산자가 선택됨.
조건 연산식이라고도 불림.
조건식(피연산자1) ? 값,연산자(피연산자2) : 값,연산자(피연산자3)
조건식 연산결과 true면, 피연산자2,
조건식 연산결과 false면, 피연산자3.
if문으로 쓰는 것보다 간단함.

package sec02.exam11;
public class ConditionalOperationExample {
	public static void main(String[] args) {
		int score=85;
		char grade = (score > 90) ? 'A' : ( (score>80) ? 'B' : 'C');	//뒤의 연산식의 결과의 결과. 뒤의 연산식의 결과는 B.
		System.out.println(score + "점은" + grade + "등급입니다.");
	}
}

실행결과

728x90