<Java> 연산자

·2023년 5월 25일
0

Java

목록 보기
2/7

비트(bit)단위 시프트 연산자

>> << >>>가 있다.

시프트 연산자는 2^n으로 곱하거나 나눈 결과를 반환한다. (보수를 구한다.)

특징

곱셈, 나눗셈보다 빠른 연산이 가능하다.

증감연산자

++i i++ 처럼 증가와 감소를 수행하는 연산자.

전위형 ++i후위형 i++이 있다.

전위형

먼저 값을 연산하고 바로 출력되어 나온다.

후위형

값이 할당된 후에 다시 호출해야 연산된 값을 출력하여 확인할 수 있다.

부호 연산자, 논리부정 연산자

부호연산자 (+, -)

+는 피연산자에 1을 곱하고, -는 피연산자에 -1을 곱한다

논리부정 연산자(!)

논리값을 반대로 바꿔버리는 연산자다.
피연산자가 논리형일 때만 사용가능.

비트전환 연산자

부호는 ~으로 표현한다.

정수를 2진수 표현했을 때 1을 0으로, 0은 1로 바꾼다.
=> 보수값을 출력

이항연산자

연산 값이 2개 이상인 연산자를 이항연산자라 칭한다.

특징

⭐️ 이항연산자는 연산을 수행하기 전에 피연산자의 타입을 일치시킨다.

나머지 연산자

%으로 표현한다.

  • 나누기한 나머지를 반환.
  • 주로 홀수나 짝수를 검사하는 데 주로 사용한다.

비트 연산자 | 논리 연산자

& ^으로 표현한다.

Java에서는 피연산자의 타입에 따라 비트 연산자 Or 논리 연산자 연산을 수행한다.

논리 연산자

&& ||& |으로 표현한다.
&&연산자가 ||보다 우선순위가 높음. 사용시, 순서에 유의해야한다.

하나짜리는 모든 식을 검사해야할 때 사용하고,
두개짜리는 조건만 검사하고 넘어가야할 때 사용한다.

boolean A = true;
boolean B = false;

A && B
// 연산할 때, A가 true이면 다음 연산을 수행.
// 하지만 A가 false라면 다음 연산을 수행하지 않고 그대로 멈춘다.

A & B
// 결과에 상관없이 무조건 식을 평가, 실행되어야 하는 코드라면 & 을 사용한다.

A || B
// true 조건에 맞는 순간, 다음 연산 및 평가 수행하지 않고 코드를 종료한다.

논리 연산자의 쓰임

package chap03;

import java.util.Scanner;

// 1. 사용자에게 영어와 수학 점수를 입력으로 받고, 두 과목 모두 80점 이상이면 true를 반환하고,
// 아니면 false 값을 출력하는 코드를 작성하시오.


// 2. 사용자에게 영어와 수학 점수를 입력으로 받고, 두 과목중에 한 과목이라도 80점 미만인 점수가있으면 true를 반환하고,
//아니면 false 값을 출력하는 코드를 작성하시오.

// 3. 사용자에게 영어와 수학 점수를 입력으로 받고, 두 과목 모두 80점 이상이면 true를 반환하고,
// 아니면 false 값을 출력하는 코드를 작성하시오. 단, And 연산자는 사용할 수 없습니다.(GG)

public class Ex8 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("영어와 수학 점수를 입력하세요.. ");
		int mathScore = sc.nextInt();
		int englishScore = sc.nextInt();
		
		sc.close();
		
//		boolean result = mathScore >= 80 && englishScore >= 80;
//		System.out.println("Example 1 : " + result);
		
//		boolean result = mathScore < 80 || englishScore < 80;
//		System.out.println("Example 2 : " + result);
		
//		내 풀이 (XOR 연산자를 이용한)
		boolean result = mathScore >= 80 ^ englishScore >= 80; // XOR 연산자는 둘 다 같으면 1(true)을 반환한다.
		System.out.println("Example 3 : " + !result); // 작동한다..
		
//		동기님 풀이
//		boolean result = mathScore >= 80 == englishScore >= 80; // 양쪽 연산이 모두 true일 때 (1) true 반환.
//		System.out.println("Example 3 : " + result);
		
		// 강사님 풀이
		boolean result = !(mathScore < 80 || englishScore < 80); // 기존에 있는 값을 반전시킴
		System.out.println("Example 2 : " + result);
		
		
	}
}

논리연산자 표

OR, AND, XOR 순

부정연산자

!으로 표현한다.

기존 조건을 반전시키기 위한 연산자.

삼항연산자

-(조건삭) ? ""(true일 때 출력값) : ""(false일 때 출력값)으로 표현.

선택문(if)을 사용하지 않고, 연산자로 선택문의 역할을 수행할 수 있다.

대입연산자

op 복합 대입연산자 | = 일반 대입연산자 표기한다.

복합 대입연산자 예시

int i = 10;
i += 5;

System.out.println("i = " + i) // i = i + 5 => i = 15;

복합 대입연산자 특징

int i = 2;
i *= 3+4; // 어떤 값이 나올끼?

=>

i = 14; // i *= (3+4) => i * 7 => result : 14

우선순위가 제일 낮음으로 먼저 우측 연산을 실행하고, 마지막에 대입연산자 연산을 실행한다.

연습문제

package chap03;
import java.util.Scanner;
/*
 * 사용자에게 하나의 실수를 입력 받아 다음의 결과를 출력하는 코드를 작성하세요.
 * 
 * 실행결과 1) 하나의 실수를 입력하세요 : 4.64
 * 버림 : 4, 반올림 : 5
 * ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
 * 실행결과 2) 하나의 실수를 입력하세요 : 6.342
 * 버림 : 6, 반올림 : 6
 * 
 * */

public class Exam1 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("\n\t하나의 실수를 입력하세요. Ex) 3.14 >>>");
		
		double num = sc.nextDouble();
		
		sc.close();
		
//		int downNum = (int)Math.floor(num);
//		int upDownNum = (int)Math.round(num);
//		
//		
//		System.out.println("downNum : " + downNum);
//		System.out.println("upDownNum : " + upDownNum);
		
		// 강사님 풀이
		System.out.println("버림 : " + (int)num);
		System.out.println("반올림 : " + (int)(num + 0.5)); //int는 소수점 이하는 다 버린다. 따라서 0.5를 더함으로써 반올림 기능 구현 가능.
		// 반올림 예시로 3.3 + 0.5 = 3.8 => int변환하면 3이 출력. | 4.6 + 0.5 = 5.1 => int 변환하면 5가 출력.
	}

}


ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
package chap03;

import java.util.Scanner;

public class Exam2 {
/*
 * [동전 교환 프로그램]
 * 
 * 다음의 실행 결과와 같은 프로그램을 작성하세요.
 * 
 * [실행 결과]
 * 
 * 지불할 금액을 입력하세요 : 10000
 * 결제 금액을 입력하세요 : 6234
 * 
 * 받으실 거스름돈 : 3766원
 * 500원 동전 : 7개
 * 100원 동전 : 2개
 * 50원 동전 : 1개
 * 10원 동전 : 1개
 * 나머지 거스름돈 : 6원
 * 
 * [코드 작성 조건]
 * 1. 여러 개의 변수를 이용하여 문제를 해결할 것.
 * 2. 하나의 변수만 사용하여 문제를 해결할 것.
 * */
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
//		지불 금액과 구매 금액 변수 선언		
		System.out.print("지불할 금액을 입력하세요. ");
		int price = sc.nextInt();
		
		System.out.print("결제할 금액을 입력하세요. ");
		int payment = sc.nextInt();

		sc.close();
		
//		지불 금액에서 구매한 금액을 연산
		int change = price - payment;
		
//		동전으로 변환하기
		int token500 = change / 500; //7개 -> 금액 구하려면 7*500
		int token100 = (change - token500*500) / 100;  
		int token50 = (change - token500*500 - token100*100) / 50 ;
		int token10 = (change - token500*500 - token100*100 - token50*50) / 10 ;
		int changeToken = (change - token500*500 - token100*100 - token50*50 - token10*10);

		
		System.out.println("price : " + price + "원");
		System.out.println("payment : " + payment + "원");
		System.out.println("change : " + change + "원");
		System.out.println("500원 개수 : " + token500 + "개");
		System.out.println("100원 개수: " + token100+ "개");
		System.out.println("50원 개수 : " + token50+ "개");
		System.out.println("10원 개수 : " + token10+ "개");
		System.out.println("남은 거스름 돈 : " + changeToken + "원");

	}

}


// 위 예제 강사님 풀이(변수 하나로 해결)
System.out.print("\n\t계산하실 금액을 입력해주세요.");
money = sc.nextInt();

System.out.print("\n구매하신 금액을 입력해주세요.");
money -= sc.nextInt();

sc.close();

System.out.print("\n\t 거스름돈 : %d원", money);
System.out.print("\t 500원 동전 : %d개\n", money / 500);

money %= 500;
System.out.print("\t 100원 동전 : %d개\n", money / 100);

money %= 100;
System.out.print("\t 50원 동전 : %d개\n", money / 50);

money %= 50;
System.out.print("\t 10원 동전 : %d개\n", money / 10);

money %= 10;
System.out.print("\t 나머지 거스름 돈: %d개\n", money / 50);

예제 2번 곱씹어서 다시

package chap03;
import java.util.Scanner;


/*
 * [동전 교환 프로그램]
 * 
 * 다음의 실행 결과와 같은 프로그램을 작성하세요.
 * 
 * [실행 결과]
 * 
 * 지불할 금액을 입력하세요 : 10000
 * 결제 금액을 입력하세요 : 6234
 * 
 * 받으실 거스름돈 : 3766원
 * 500원 동전 : 7개
 * 100원 동전 : 2개
 * 50원 동전 : 1개
 * 10원 동전 : 1개
 * 나머지 거스름돈 : 6원
 * 
 * [코드 작성 조건]
 * 1. 여러 개의 변수를 이용하여 문제를 해결할 것.
 * 2. 하나의 변수만 사용하여 문제를 해결할 것.
 * */
public class Exam03_self_again {

	public static void main(String[] args) {
		// Scanner객체 생성
		Scanner sc = new Scanner(System.in);
		
		// 식
		System.out.print("\t\n지불할 금액을 입력하세요. : ");
		int money = sc.nextInt();
		System.out.printf("\t\n지불할 금액 : %d ", money);
		
		System.out.print("\n\t결제금액을 입력하세요. : ");
		money -= sc.nextInt();
		
		System.out.printf("\t\n거스름 돈 : %d ", money);
		
		sc.close();
		
		System.out.printf("\t\n500원 동전 : %d개 ", money / 500);
		money %= 500;
		System.out.printf("\t\n\n현재 남은 잔액 : %d ", money);
		
		System.out.printf("\t\n100원 동전 : %d개 ", money / 100);
		money %= 100;
		System.out.printf("\t\n\n현재 남은 잔액 : %d ", money);
		
		System.out.printf("\t\n50원 동전 : %d개 ", money / 50);
		money %= 50;
		System.out.printf("\t\n\n현재 남은 잔액 : %d ", money);
		
		System.out.printf("\t\n10원 동전 : %d개 ", money / 10);
		money %= 10;
		System.out.printf("\t\n\n현재 남은 잔액 : %d ", money);
		
		System.out.printf("\t\n거스름 돈 : %d원 ", money);
		System.out.printf("\t\n\n현재 남은 잔액 : %d ", money);
		

	}

}
profile
- 배움에는 끝이 없다.

0개의 댓글