Chap 03. Java의 여러 가지 연산자 [Do it! 자바 프로그래밍 입문]

doriskim·2022년 11월 13일
0

*본 내용은 [Do it! 자바 프로그래밍 입문] 책과 강의를 보고 공부하면서 요점 정리한 내용입니다.

◼ 기본 연산자

✔ 대입 연산자 (=)

int age = 24; //age 변수에 24 값 대입

✔ 부호 연산자 (+, -)

변수나 상수 값을 양수/음수로 만드는 연산자

int num = 10;
System.out.println(-num); //-10이 출력되지만 num변수 자체의 값이 -10이 되는 것은 아님.

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

+ 더하기
- 빼기
* 곱하기
/ 나누기
% 나머지

※나머지 연산자 (%)
- 숫자 n의 나머지는 0 ~ n-1 범위의 수
- 특정 범위 안의 수를 구할 때 종종 사용

✔ 증가·감소 연산자 (++, --)

++ 항의 값에 1을 더함
-- 항의 값에서 1을 뺌

※항의 앞/뒤 위치에 따라 연산의 결과가 달라짐에 유의

val = num++; //먼저 num 값에 1 증가한 후 val 변수에 대입
val = num--; //val 번수에 기존 num 값을 먼저 대입한 후 num 값 1 증가

✔ 관계 연산자 (>, <, >=, <=, ==, !=)

연산의 결과가 true(참) 또는 false(거짓)으로 반환 됨

연산자기능연산 예
>왼쪽 항이 크면 참을, 아니면 거짓을 반환합니다.num > 3;
<왼쪽 항이 작으면 참, 아니면 거짓을 반환합니다.num < 3;
>=왼쪽 항이 오른쪽 항보다 크거나 같으면 참, 아니면 거짓을 반환합니다.num >= 3;
<=왼쪽 항이 오른쪽 항보다 작거나 같으면 참, 아니면 거짓을 반환합니다.num <= 3;
==두 개의 항의 값이 같으면 참, 아니면 거짓을 반환합니다.num == 3;
!=두 개의 항이 다르면 참, 아니면 거짓을 반환합니다.num != 3;

✔ 논리 연산자 (&&, ||, !)

연산의 결과가 true(참) 또는 false(거짓)으로 반환 됨

연산자기능연산 예
&&
(논리 곱)
두 항이 모두 참인 경우에만 결과 값이 참입니다. 그렇지 않은 경우는 거짓입니다.booleanval = (5 > 3) && (5 > 2);
||
(논리 합)
두 항 중 하나의 항만 참이면 결과 값은 참입니다. 두 항이 모두 거짓이면 결과 값은 거짓입니다.booleanval = (5 > 3) || (5 < 2);
!
(부정)
단항 연산자입니다. 참인 경우는 거짓으로 바꾸고, 거짓인 경우는 참으로 바꿉니다.booleanval = !(5 > 3);

※단락 회로 평가(SCE; Short Circuit Evaluation)

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

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

OperationEx3.java

package operator;

public class OperationEx3 {
	public static void main(String[] args) {
    	int num1 = 10;
        int i = 2;
        
        boolean value = ((num1 = num1 + 10) < 10) && ((i = i + 2) <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);
        // 논리 합에서 앞 항의 결과 값이 참이므로 ((i = i + 2) <10) 문장은 실행되지 않음
        System.out.println(value);
        System.out.println(num1);
        System.out.println(i);
	}
}

출력화면

false
20
2 //논리 곱에서 앞 항이 거짓이면 뒷 항이 실행되지 않아 i 값은 그대로
true
30
2 //논리 합에서 앞 항이 참이면 뒷 항이 실행되지 않아 i 값은 그대로

✔ 복합 대입 연산자 (+=, -=, *=, /=, %=, <<=, >>=, >>>=, &=, |=, ^=)

연산자기능연산 예
+=두 항의 값을 더해서 왼쪽 항에 대입합니다.num += 2;
num1 = num1 + 2;와 같음
-=왼쪽 항에서 오른쪽 항을 빼서 그 값을 왼쪽 항에 대입합니다.num -= 2;
num1 = num1 - 2;와 같음
*=두 항의 값을 곱해서 왼쪽 항에 대입합니다.num = 2;
num1 = num1
2;와 같음
/=왼쪽 항을 오른쪽 항으로 나누어 그 몫을 왼쪽 항에 대입합니다.num /= 2;
num1 = num1 / 2;와 같음
%=왼쪽 항을 오른쪽 항으로 나누어 그 나머지를 왼쪽 항에 대입합니다.num %= 2;
num1 = num1 % 2;와 같음
<<=비트를 왼쪽으로 이동하고 그 값을 왼쪽 항에 대입합니다.num <<= 2;
num1 = num1 << 2;와 같음
>>=비트를 오른쪽으로 이동하고 그 값을 왼쪽 항에 대입합니다.(왼쪽에 채워지는 비트 값은 부호 비트와 동일합니다.num >>= 2;
num1 = num1 >> 2;와 같음
>>>=비트를 오른쪽으로 이동하고 그 값을 왼쪽 항에 대입합니다.(왼쪽에 채워지는 비트 값은 0입니다.num >>>= 2;
num1 = num1 >>> 2;와 같음
&=두 항의 & 비트 연산 후 그 값을 왼쪽 항에 대입합니다.num &= 2;
num1 = num1 & 2;와 같음
|=두 항의 | 비트 연산 후 그 값을 왼쪽 항에 대입합니다.num |= 2;
num1 = num1 | 2;와 같음
^=두 항의 ^ 비트 연산 후 그 값을 왼쪽 항에 대입합니다.num ^= 2;
num1 = num1 ^ 2;와 같음

✔ 조건 연산자 (조건식 ? 결과1 : 결과2;)

[ 조건식 ? 결과1 : 결과2; ]
조건식이 참이면 결과1, 거짓이면 결과2가 선택됨.

예시)

int num = (5>3) ? 10: 20; //5는 3보다 크므로 10이 num에 대입됨

◼ 비트 연산자

비트연산자는 c언어에선 종종 쓰지만 Java에선 많이 쓰진 않는다
비트 연산자는 정수에만 사용할 수 있다

연산자설명
~비트의 반전 (1의 보수)a = ~a;
&비트 단위 AND[1 & 1] 1반환 그 외는 0
|비트 단위 OR
^비트 단위 XOR두 개의 비트가 서로 다른 경우에 1을 반환
<<왼쪽 shifta << 2 변수 a를 2비트만큼 왼쪽으로 이동
>>오른쪽 shifta >> 2 변수 a를 2비트만큼 오른쪽으로 이동
>>>오른쪽 shift>> 동일한 연산. 채워지는 비트가 부호와 상관없이 0임

✔ 비트 논리 연산자 (&, |, ^, ~)

(원래 int는 32비트지만 너무 기니까 8비트만 예시로)

  • & (AND) 연산자: 두 비트가 모두 1인 경우만 1, 아니면 0

  • | (OR) 연산자: 두 비트가 모두 0인 경우만 0, 아니면 1

  • ^ (XOR) 연산자: 두 비트가 다른 값이면 1, 같은 값이면 0

  • ~ (반전) 연산자: 비트 값을 0은 1로, 1은 0으로 바꾸는 연산자

✔ 비트 이동 연산자 (<<, >>, >>>)

  • << (왼쪽 shift)
    비트를 왼쪽에서 오른쪽으로 이동하는 연산자
    왼쪽으로 n비트 이동한다는 것은 기존 값이 2n2^n만큼 곱한다는 뜻이다

  • >> (오른쪽 shift)
    비트를 오른쪽에서 왼쪽으로 이동하는 연산자
    오른쪽으로 n비트 이동한다는 것은 기존 값에 2n2^n만큼 나눈다는 뜻이다
    왼쪽에 채워지는 비트 값은 기존 값의 부호 비트와 동일하다

  • >>>
    shift로 비트이동은 동일한데, 남은 공간을 무조건 부호비트가 아닌 0으로 채운다

예시)

15<<2 의 결과가 60이 되었다. 이는 15에 222^2만큼 곱해준 결과와 같다.

◼ 연산자 우선순위

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

0개의 댓글

관련 채용 정보