[JAVA] part1. java programming 11~13 연산자

문상훈·2022년 1월 19일
0

Java

목록 보기
2/3
post-thumbnail

ch 11 ~ 13. 자바의 연산자들

대입, 부호, 산술, 복합대입, 증감연산자

항과 연산자

  • 항(operand) : 연산에 사용되는 값
  • 연산자 (operator) : 항을 이용하여 연산하는 기호

대입 연산자 (assignment operator)

  • 변수에 다른 변수나 값을 대입하는 연산자
  • 이항 연산자 중 우선 순위가 가장 낮은 연산자들

왼쪽 변수 = 오른쪽 변수 (또는 식, 값)

부호 연산자

  • 단항 연산자
  • 변수의 부호를 유지 하거나(+) 바꿈(-)
  • 실제 변수의 부호가 변하려면 대입 연산자를 사용해야 함

산술 연산자

  • 사칙 연산자
연산자기능연산 예
+두 항을 더한다5+3
-앞에 있는 항에서 뒤에 있는 항을 뺀다5-3
*두 항을 곱한다5* 3
/앞에 있는 항에서 뒤에 있는 항을 나누어 몫을 구한다5/3
%앞에 있는 항에서 뒤에 있는 항을 나누어 나머지를 구한다5%3
  • % : 숫자 n 의 나머지 범위는 0 ~ n-1

복합 대입 연산자

  • 대입 연산자와 다른 연산자가 함께 쓰임
연산자기능
+=두 항의 값을 더해서 왼쪽 항에 대입한다
-=왼쪽 항에서 오른쪾 항을 빼서 그 값을 왼쪽 항에 대입한다
* =두 항의 값을 곱해서 왼쪽 항에 대입한다
/=왼쪽 항을 오른쪽 항으로 나누어 그 몫을 왼쪽 항에 대입한다
%=왼쪽 항을 오른쪽 항으로 나누어 그 나머지를 왼쪽 항에 대입한다
<<=비트를 왼쪽으로 이동하고 그 값을 왼쪽 항에 대입한다
>>=비트를 오른쪽으로 이동하고 그 값을 왼쪽 항에 대입한다
(왼쪽에 채워지는 비트 값은 부호 비트와 동일하다)
>>>=비트를 오른쪽으로 이동하고 그 값을 왼쪽 항에 대입한다
(왼쪽에 채워지는 비트 값은 0이다)
&=두 항의 & 비트 연산 후 그 값을 왼쪽 항에 대입한다
|=두 항의 | 비트 연산 후 그 값을 왼쪽 항에 대입한다
^=두 항의 ^비트 연산 후 그 값을 왼쪽 항에 대입한다

num1 ☆ 2;
num 1 = num 1 +2;
두 표현법은 서로 같다

증가, 감소 연산자

  • 단항 연산자
  • 변수의 값을 1 더하거나 1 뺄때 사용

    연산자가 항의 앞에 있는가 뒤에 있는가에 따라 연산 시점과 결과가 달라짐
    문장(statement)의 끝(;)을 기준으로 연산 시점을 생각해야 함

연산자기능
++항의 값에 1을 더한다
--항의 값에서 1을 뺀다
val = ++num; // 먼저 num 값이 1 증가한 후 val 변수에 대입
val = num++; // val 변수에 기존 num 값을 먼저 대입한 후 num 값 1 증가
val = --num; // 먼저 num 값이 1 감소한 후 val 변수에 대입
val = num--; // val 변수에 기존 num 값을 먼저 대입한 후 num 값 1 감소

관계 연산자

  • 이항 연산자
  • 연산의 결과가 true(참), false(거짓)으로 반환 됨, 비교연산자 라고도 함
  • 조건문, 반복문의 조건식으로 많이 사용 됨
연산자기능
>왼쪽 항이 크면 참, 아님 거짓을 반환한다
<왼쪽 항이 작으면 참, 아님 거짓을 반환한다
>=왼쪽 항이 크거나 같으면 참, 아님 거짓을 반환한다
<=왼쪽 항이 작거나 같으면 참, 아님 거짓을 반환한다
==두 개 항의 값이 같으면 참, 아님 거짓을 반환한다
!=두 개 항의 값이 다르면 참, 아님 거짓을 반환한다
package ch12;

public class RealtionalTest {

	public static void main(String[] args) {

		int num1 = 5;
		int num2 = 3;
		
		boolean value = (num1 > num2);
		System.out.println(value);
		
		System.out.println(num1 < num2);
		System.out.println(num1 >= num2);
		System.out.println(num1 <= num2);
		System.out.println(num1 == num2);
		System.out.println(num1 != num2);
	}
}

결과값 : T F T F F T

논리 연산자

  • 관계 연산자와 혼합하여 많이 사용 됨
  • 연산의 결과가 true(참), false(거짓)으로 반환 됨
연산자기능연산 예
&&(논리 곱)두 항이 모두 참인 경우에만 결과 값이 참, 아님 거짓이다booleanval = (5>3) && (5>2);
||(논리 합)두 항 중 하나의 항만 참이면 결과 값은 참,
두 항이 모두 거짓이면 결과 값은 거짓이다
booleanval = (5>3)
!(부정)단항 연산자이다.
참인 경우는 거짓으로 바꾸고 거짓인 경우는 참으로 바꾼다
booleanval = !(5>3);
package ch12;

public class LogicalTest {

	public static void main(String[] args) {
		
		int num1 = 10;
		int num2 = 20;
		
		boolean flag = (num1 > 0) && (num2 > 0);
		System.out.println(flag);
		
		flag = (num1 < 0) && (num2 > 0);
		System.out.println(flag);
		
		flag = (num1 > 0) || (num2 > 0);
		System.out.println(flag);
		
		flag = (num1 < 0) || (num2 > 0);
		System.out.println(flag);
		
		flag = !(num1 > 0);
		System.out.println(flag);
	}
}

결과 값 : T F T T F

논리 연산에서 모든 항이 실행되지 않는 경우 - 단락 회로 평가 (short circuit evaluation)

  • 논리 곱(&&)은 두 항의 결과가 모두 true일 때만 결과가 true
    앞의 항의 결과가 false이면 뒤 항의 결과를 평가하지 않음

논리 합(||)은 두 항의 결과가 모두 false일 때만 결과가 false
앞의 항의 결과가 true이면 뒤 항의 결과를 평가하지 않음

package ch12;

public class ShortCircuit {

	public static void main(String[] args) {
		
		int num1 = 10;
		int i = 2;
		
		boolean value = ((num1 = num1 + 10 ) < 10) && ( ( i = i + 2 ) < 10);
		System.out.println(value);
		System.out.println(num1);
		System.out.println(i);
		
		value = ((num1 = num1 + 10 ) < 10) || ( ( i = i + 2 ) < 10);
		System.out.println(value);
		System.out.println(num1);
		System.out.println(i);
		
	}
}

결과 값 : F 20 2 T 30 4

조건 연산자

  • 삼항 연산자
  • 조건식의 결과가 true(참)인 경우와 false(거짓)인 경우에 따라 다른 결과가 수행됨
  • if (조건문)을 간단히 표현할 때 사용 할 수 있음

    조건식이 참이면 결과1, 조건식이 거짓이면 결과2가 선택된다

연산자기능연산 예
조건식 ? 결과1 : 결과2;조건식이 참이면 결과1, 조건식이 거짓이면 결과2가 선택된다int (5>3) ? 10 : 20;
package ch13;

import java.util.Scanner;

public class ConditionTest {

	public static void main(String[] args) {

		int max;
		System.out.println("입력 받은 두 수중 큰 수를 출력하세요\n ");
		
		Scanner scanner = new Scanner(System.in);
		System.out.println("입력1:");
		int x = scanner.nextInt();
		System.out.println("입력2:");
		int y = scanner.nextInt();
		
		max = (x > y)? x : y;
		System.out.println(max);
	}
}

비트 연산자

  • 대입연산자와 다른 연산자가 함께 쓰임
  • 마스크 : 특정 비트를 가리고 몇 개의 비트 값만 사용할 때
  • 비트켜기 : 특정 비트들만을 1로 설정해서 사용하고 싶을 때
    예) & 00001111 ( 하위 4비트 중 1인 비트만 꺼내기)
  • 비트끄기 : 특정 비트들만을 0으로 설정해서 사용하고 싶을 때
    예) | 11110000 ( 하위 4비트 중 0 인 비트만 0으로 만들기)
  • 비트 토글 : 모든 비트들을 0은 1로, 1은 0으로 바꾸고 싶을 때
연산자설명
~비트이 반전 (1의 보수)a=~a;
&비트단위 AND1&1 -> 1반환 그 외에는 0
|비트단위 OR0|0 -> 0반환 그 외에는 1
^비트단위 XOR두 개의 비트가 서로 다른 경우에 1을 반환
<<왼쪽 shifta<<2 변수 a를 2비트만큼 왼쪽으로 이동
>>오른쪽 shifta>>2 변수 a를 2비트만큼 오른쪽으로 이동
>>>오른쪽 shift>>동일한 연산 / 채워지는 비트가 부호와 상관 없이 0임
package ch13;

public class BitTest {

	public static void main(String[] args) {

		int num1 = 5;  	// 00000101
		int num2 = 10; 	// 00001010
				
		System.out.println(num1 | num2);
		System.out.println(num1 & num2);
		System.out.println(num1 ^ num2);
		System.out.println(~num1);
		
		System.out.println(num1 << 2);
		System.out.println(num1);
		System.out.println(num1 <<= 2);
		System.out.println(num1);
		
	}
}

결과 값 : 15 0 15 -6 20 5 20 20

연산자 우선순위

우선순위연산자연산방향
1일차식(),[ ],.
2단항!,++,--,+,-
3산술%,/
4산술+,-
5비트이동<<,>>
6관계<,>,<=,>=
7관계==,!=
8비트 곱&
9비트 차^
10비트 합|
11논리 곱&&
12논리 합||
13조건?:
14대입=,+=,-=,* =,%=,/=
profile
내가 왜 개발잔거지

0개의 댓글