연산자 (Operator)

김찬희·2023년 2월 8일
0

KH정보교육원

목록 보기
3/27

▶ 연산자 종류와 우선 순위

package edu.kh.variable;

public class Practice {

	public static void main(String[] args) {
		
		/* 기본 자료형 8가지
		 * 
		 * 정수형
		 * byte(1), short(2), int(4)(기본형), long(8, L/l)
		 * 
		 * 실수형
		 * float(4, F/f), double(8)
		 * 
		 * 문자형
		 * char(2)
		 * 
		 * 논리형
		 * boolean(1, true/false)
		 * 
		 * 
		 * [컴퓨터 값 처리 원칙]
		 * 같은 자료형끼리만 연산 가능, 결과도 같은 자료형
		 * 
		 * [자동 형변환]
		 * 값의 범위가 다른 자료형끼리의 연산 시
		 * 범위가 작은 자료형을 큰 자료형으로 변환
		 * (컴파일러가 자동으로 진행)
		 * 
		 * [강제 형변환]
		 * 특정한 자료형으로 강제 변환(바꾸고 싶은 자료형을 명시)
		 * 데이터 손실이 발생할 수 있다
		 *  
		 * */
		
		int iNum1 = 10;
		int iNum2 = 4;
		float fNum = 3.0F;
		double dNum = 2.5;
		char ch = 'A';
		char ch1 = 'b';
		// println() 자동 완성 : syso -> ctrl + spacebar -> enter
		System.out.println(iNum1/iNum2);  // 2
		System.out.println((int)dNum);  // 2
		System.out.println(iNum2 * dNum);  // 10.0
		System.out.println((double)iNum1);  // 10.0
		System.out.println((double)iNum1 / iNum2);  // 2.5
		System.out.println((int)fNum);  // 3
		System.out.println((int)(iNum1 / fNum));  // 3
		System.out.println(iNum1 / fNum);  // 3.3333333
		System.out.println((double)iNum1 / fNum);  // 3.3333333333333335
		System.out.println((int)ch);  // 65
		System.out.println(iNum1 + ch);  // 75
		System.out.println((char)(ch + iNum1));  // K
	}
}

▶ 산술 연산자

일반 수학과 동일한 연산 방법, 우선순위. 단, %는 나누기의 나머지 값을 구하는 연산

package edu.kh.operator.ex;

import java.util.Scanner;  // Scanner import 코드

public class OperatorEx1 {
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);  // Scanner 객체 생성
		
		// 산술 연산자 : + - * / %(modulo, mod 나머지)
		
		System.out.println("두 정수를 입력 받아 산술 연산 결과 출력하기");
		
		System.out.print("정수 입력 1 : ");
		int input1 = sc.nextInt();
		
		System.out.print("정수 입력 2 : ");
		int input2 = sc.nextInt();
		
		// \n : 줄바꿈 (탈출문자)
		System.out.printf("%d + %d = %d \n", input1, input2, input1+input2);
		
		System.out.printf("%d - %d = %d \n", input1, input2, input1-input2);
		
		System.out.printf("%d * %d = %d \n", input1, input2, input1*input2);
		
		System.out.printf("%d / %d = %d \n", input1, input2, input1/input2);
		
		System.out.printf("%d %% %d = %d \n", input1, input2, input1%input2);
		// printf에서 '%' 글자를 출력하고 싶으면 "%%"를 작성!

	}
}

▶ 증감 연산자

√ 증감 연산자 : ++, --
피연산자의 값에 1을 더하거나 빼는 연산자로 위치에 따라 결과 값이 다르게 나타남
전위 연산 : 먼저 연산 후 다른 연산 실행
후위 연산 : 다른 연산 우선 실행 후 연산
√ 전위 연산자 예시

int a = 10;
int b = ++a;
System.out.println(a + ", " + b);
// 10, 11

√ 후위 연산자 예시

int a = 10;
int b = a++;
System.out.println(a + ", " + b);
// 10, 10

▶ 비교 연산자

데이터가 같은지, 다른지 비교할 때 쓰이며 항상 결과값은 논리 값(true, false)으로 나타남.
a == b : a와 b가 같으면 true
a != b : a와 b가 다르면 true
√ == 연산자 예시

int a = 10;
int b = 10;
System.out.println(a == b);
// true

√ != 연산자 예시

double a = 1.23;
double b = 3.14;
System.out.println(a != b);
// true

두 피연산자의 값의 크기 비교
기본현 boolean과 참조형을 제외하고 나머지 자료형에 모두 사용 가능
√ 비교 연산자 예시

if(a < b) {}
int result = a > b ? a++ : b--;
for(int a = 0; a <= b; a++) {}
while(a >= b) {}

1) 표기법 (복합 기호에 항상 '=' 오른쪽)
같다 : ==
같지않다 : !=
이상 : >=
이하 : <=
초과 : >
미만 : <
2) 비교 연산의 결과는 무조건 논리형(true/false)

package edu.kh.operator.ex;

public class OperatorEx2 {
	// main method 자동 완성 : "main" -> ctrl + spacebar -> enter
	public static void main(String[] args) {
		
		/* 증감 연산자 : ++, --
		 * - 피연산자를 1씩 증가 또는 감소시키는 연산자
		 * 
		 * 전위 연산 : ++a, --a
		 * - 다른 연산보다 먼저 a를 증가 또는 감소시킴 (최우선)
		 * 
		 * 후위 연산 : a++, a--
		 * - 다른 연산을 모두 수행한 후 a를 증가 또는 감소시킴 (마지막)
		 * 
		 * */
		
		// 증감 연산 확인
		int num1 = 10;
		int num2 = 10;
		
		System.out.printf("[연산 전] num1 : %d / num2 : %d \n", num1, num2);
		
		num1++; // 1 증가
		num1++; // 1 증가
		num1++; // 1 증가
		// num1++ 는
		// num1 = num1 + 1 과 같음
		
		num2--; // 1 감소
		num2--; // 1 감소
		// num2-- 는
		// num2 = num2 - 1 과 같음
		
		System.out.printf("[연산 후] num1 : %d / num2 : %d \n", num1, num2);
		
		System.out.println("--------------------");
		
		// 전위 연산
		int num3 = 5;
		
		System.out.println("++num3 : " + (++num3));  // num3 = 6 변한 값이 그대로 변수에 들어간다.
		System.out.println("--num3 + 10 : " + (--num3 + 10)); // num3 = 15

		// 후위 연산
		int num4 = 1;
		System.out.println("num4-- : " + (num4--));  // 1
		System.out.println("연산 후 num4 : " + num4);  // num4 = 0
		System.out.println("num4++ -3 : " + (num4++ -3));  // -3
		System.out.println("연산 후 num4 : " + num4);  // num4 = 1
		
		//--------------
		int a = 3;
		int b = 5;
		int c = a++ + --b;
		// c = 3++(a) + --5(b)
		// c = 3++(a) + 4(b)
		// c = 7
		
		// a = 3++ -> 4
		
		// 최종적으로 a, b, c,는 각각 얼마인가?
		// a = 4
		// b = 4
		// c = 7
		
		System.out.printf("a = %d , b = %d , c = %d \n", a,b,c);
		
		System.out.println("-------------------");
		
		// 비교 연산자 : ==  !=  >  <  >=  <=
		// - 복합 기호에서 등호(=)는 항상 오른쪽
		// - 비교 연산의 결과는 항상 논리형(true/false)
		
		int num5 = 100;
		int num6 = 200;
		
		System.out.println(num5 == num6);  // false
		System.out.println(num5 != num6);  // true
		System.out.println(num5 > num6);  // false
		System.out.println(num5 < num6);  // true
		System.out.println(num5 >= num6-num5);  // true
		System.out.println((num6 <= num5+num5) == false);  // false
		
		// 짝수 검사 = 2의 배수인가?
		System.out.println(4 % 2 == 0);  // true
		System.out.println(5 % 2 == 0);  // false
		System.out.println(6 % 2 == 0);  // true
		System.out.println(7 % 2 == 0);  // false
		
		System.out.println(8 % 2 != 1);  // true
		
		//홀수 검사
		System.out.println(4 % 2 == 1);  // false
		System.out.println(5 % 2 == 1);  // true
		
		System.out.println(6 % 2 != 0);  // false
		System.out.println(7 % 2 != 0);  // true
		
		System.out.println("463984는 3의 배수인가? : " + (463984 % 3 == 0));  // false
		System.out.println("463984는 4의 배수인가? : " + (463984 % 4 == 0));  // true
	}		
}

▶ 논리 연산자

논리 값 두 개를 비교하는 연산자
남성 이면서 안경 쓰신분 남자 && 안경
남성 또는 안경 쓰신분 남자 || 안경
&(앰퍼센트)
&& : 두 피연산자가 모두 true일 때 true 반환 (AND 연산자)
논리값 && 논리값
T && T = T 모두 true 일 때만 true
|(버티칼바)
|| : 두 피연산자 중 하나만 true여도 true 반환 (OR 연산자)
논리값 || 논리값
F || F = F 모두 false 일 때만 false

▶ 논리 부정 연산자

√ 논리 부정 연산자 : !
논리 값을 부정하여 반대 값으로 변경
제어문을 활용할 때 많이 쓰임
√ 논리 부정 연산자 예시

boolean bool1 = true;
boolean bool2 = !bool1;
System.out.println(bool2);
// false

√ 단항 연산자
!true == false
!false == true

package edu.kh.operator.ex;

public class OperatorEx3 {

	public static void main(String[] args) {

		// 논리 연산자 : &&(AND), ||(OR)
		
		// &&(AND) 연산자 : 둘 다 true이면 true, 나머진 false
		// ~와, 그리고(이고), (이)면서, 부터, 까지, 사이
		
		// 정수가 100 이상이면서 짝수인가?
		int num1 = 100;
		boolean result1 = (num1>=100) && (num1%2==0);
		System.out.println("100 이상이면서 짝수인가? : " + result1);
		
		// 정수가 50 이하이고 3의 배수인가?
		int num2 = 36;
		boolean result2 = (num2<=50) && (num2%3==0);
		System.out.println("50 이하이고 3의 배수인가? : " + result2);
		
		
		// 정수가 1부터 100 사이의 숫자인가?
		int num3 = 99;
		boolean result3 = (num3>=1) && (num3<=100);
		System.out.println("1부터 100 사이의 숫자인가? : " + result3);
		
		// ||(OR) 연산자 : 둘 다 false이면 false, 나머진 true
		// 또는, ~(이)거나

		// 정수가 10을 초과하거나 홀수인가?
		int num4 = 8;
		boolean result4 = (num4 > 10) || (num4%2!=0);
		System.out.println("10을 초과하거나 홀수인가? : " + result4);
		
		
		
		// 정수는 0부터 50 사이 숫자 또는 음수인가?
		int num5 = 49;
//		boolean result5 = (num5>=0 && num5<=50) || num5<0;
//					    4       1   2      1     3     1
		boolean result5 = num5<=50;
		System.out.println("0부터 50 사이 숫자 또는 음수인가? : " + result5);
		
		
		
		// 논리 부정 연산자 : ! (NOT)
		// - 논리 값을 반대로 바꾸는 연산자
		
		// 11은 짝수가 아니다
		System.out.println("11은 짝수가 아니다 : " + !(11%2==0));
		
		System.out.println(true || false && !false);

	}

}

▶ 복합 대입 연산자

다른 연산자와 대입 연산자가 결합한 것으로
자기 자신과 연산 후 연산 결과를 자기 자신에게 누적 대입

package edu.kh.operator.ex;

public class OperatorEx5 {

	public static void main(String[] args) {
		
		// 복합 대입 연산자 : +=  -=  *=  /=  %=
		// - 기존 변수에 저장된 값과 새로 대입되는 값의 산술 연산 결과를 대입
		// - +=(누적)  -=(차감)
		
		int a = 10;
		
		a++;  // a = a + 1
		System.out.println("a를 1 증가 : " + a);  // 11
		
		a += 4;  // a = a + 4
		System.out.println("a를 4 증가 : " + a);  // 15
		
		a -= 10;  // a = a - 10
		System.out.println("a를 10 감소 : " + a);  // 5
		
		a *= 3;  // a = a * 3
		System.out.println("a를 3배 증가 : " + a);  // 15
		
		a /= 6;  // a = a / 6
		System.out.println("a를 6으로 나눴을 때 몫 : " + a);  // 2
		
		a %= 2;  // a = a % 2
		System.out.println("a를 2로 나눴을 때 나머지 : " + a);  // 0
		
	}
}

▶ 삼항 연산자

비교 / 논리 / 논리부정
-> true / false 일 때
A B 의 결과를 나타내고 싶음
조건식 ? 식1 : 식2;
조건식의 결과 값에 따라 연산을 처리하는 방식으로 결과 값이 참일 경우 식1, 거짓일 경우 식2 수행 삼항 연산자 안에 삼항 연산자를 중첩하여 쓰는 것도 가능
√ 삼항 연산자 예시

int result1 = a > b ? a++ : b--;
int result2 = a < b ? a++ : (b ==0 ? a-- : b++);
package edu.kh.operator.ex;

import java.util.Scanner;

public class OperatorEx4 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.println("[홀짝 검사기]");
		
		System.out.print("정수 하나를 입력해주세요 : ");
		
		int input = sc.nextInt();
		
		// 삼항 연산자
		// 조건식 ? true인 경우 : false인 경우
		
		// Math.abs(숫자) -> 절대값
		String result = Math.abs(input)%2==1 ? "홀수입니다." : input==0 ? "0입니다." : "짝수입니다.";
		System.out.println(result);
	}
}
profile
김찬희입니다.

0개의 댓글