6강. 여러 가지 연산자(2)

  • Do it! 자바 프로그래밍 입문 온라인 강의를 수강하며 작성하였습니다.
  • Section 0. 자바 기본 익히기
  • 6강 "여러 가지 연산자(2)"
  • 복합 대입 연산자 > 조건 연산자 > 비트 연산자 > 연산자 우선 순위

복합 대입 연산자

  • 대입 연산자와 다른 연산자를 함께 사용한다.
  • 프로그램에서 자주 사용하는 연산자
연산자개념예시
+=두 항의 값을 더해서 왼쪽 항에 대입한다.num += 2;
num = num + 2; 와 같음
-=왼쪽 항에서 오른쪽 항을 빼서 그 값을 왼쪽 항에 대입한다.num -= 2;
num = num - 2; 와 같음
*=두 항의 값을 곱해서 왼쪽 항에 대입한다.num *= 2;
num = num * 2; 와 같음
/=왼쪽 항을 오른쪽 항으로 나누어 그 몫을 왼쪽 항에 대입한다.num /= 2;
num = num / 2; 와 같음
%=왼쪽 항을 오른쪽 항으로 나누어 그 나머지를 왼쪽 항에 대입한다.num %= 2;
num = num % 2; 와 같음
public class OperationEx4 {
	public static void main(String[] args) {
		int num = 10;
		System.out.println(num+=1);	//num == 10+1
		System.out.println(num-=1);	//num == 11-1
		System.out.println(num*=2);	//num == 10*2
		System.out.println(num/=2);	//num == 20/2
		System.out.println(num%=3);	//num == 10%3
	}
}

조건 연산자

  • 삼항 연산자
  • 조건 식의 결과가 true(참)인 경우와 false(거짓)인 경우에 따라 다른 식이나 결과가 수행된다.
  • 제어문 중 조건문을 간단히 표현할 때 사용할 수 있다.
연산자개념예시
조건식 ? 결과1 : 결과2조건식이 참이면 결과1, 거짓이면 결과2가 선택된다.int num = (5>3) ? 10 : 20;
num에는 10이 대입됨

비트 연산자

  • 정수에만 사용 가능
  • 계산을 빠르게 처리하고 싶을 때 사용할 수 있다.
  • 실제 프로그래밍에서 자주 사용하지는 않는다.
연산자개념예시
~비트의 반전 (1의 보수)a = ~a;
&비트 단위 AND1 & 1 (둘 다 1이면 1 반환, 하나라도 0이면 0 반환)
|비트 단위 OR0 | 0 (둘 다 0이면 0 반환, 하나라도 1이면 1 반환)
^비트 단위 XOR두 개의 비트가 서로 다른 경우에 1을 반환
<<왼쪽 shifta<<2 (변수 a를 2비트 만큼 왼쪽으로 이동)
비트를 왼쪽으로 한 칸 이동하면 숫자에 *2를 해준 것과 같은 효과이다. (2진법이므로)
>>오른쪽 shifta>>2 (변수 a를 2비트 만큼 오른쪽으로 이동)
빈 칸은 부호 비트와 동일하게 채워진다.
비트를 오른쪽으로 한 칸 이동하면 숫자에 /2를 해준 것과 같은 효과이다. (2진법이므로)
>>>오른쪽 shift>>와 동일한 연산이지만 채워지는 비트가 부호와 상관 없이 0으로 채워진다.
public class OperationEx5 {
	public static void main(String[] args) {
		int num1 = 5;	//0000 0101
		int num2 = 10;	//0000 1010
		System.out.println(num1&num2);	//0000 0000 == 0
		System.out.println(num1|num2);	//0000 1111 == 15
        System.out.println(~num1);	//1111 ... 1010 == -6
		/*-----------------------------------------------------------*/
		int num3 = 5;	//0000 0101
		System.out.println(num3 << 1);	//0000 1010 == 10
		System.out.println(num3);		//num3 에는 변화 없음
		System.out.println(num3 << 3);	//5 * 2^3 == 40
		System.out.println(num3 >> 2);	//0000 0001 == 1
		/*-----------------------------------------------------------*/
		int num4 = -5;	//1111 ... 1011
		System.out.println(num4 << 1);	//1111 ... 0110 == -10
		System.out.println(num4 << 3);	//-5 * 2^3 == -40
		System.out.println(num4 >> 2);	//1111 ... 1110 == -2
		System.out.println(num4 >>> 2);	//0011 ... 1110 == 1073741822
	}
}

Eclipse에서 실행해본 결과를 주석에 달아두었다.
음수는 실제로 계산해보기가 어려워서 비트계산기를 활용하여 값을 직접 확인해보았다.

복합 대입 연산자와 비트연산자

연산자개념예시
<<=비트를 왼쪽으로 이동하고 그 값을 왼쪽 항에 대입한다.num <<= 2;
num = num << 2; 와 같음
>>=비트를 오른쪽으로 이동하고 그 값을 왼쪽 항에 대입한다.
왼쪽에 채워지는 비트 값은 부호 비트와 동일하다.
num >>= 2;
num = num >> 2; 와 같음
>>>=비트를 오른쪽으로 이동하고 그 값을 왼쪽 항에 대입한다.
왼쪽에 채워지는 비트 값은 0이다.
num >>>= 2;
num = num >>> 2; 와 같음
&=두 항의 & 비트 연산 후 그 값을 왼쪽 항에 대입한다.num1 &= num2;
num1 = num1 & num2; 와 같음
|=두 항의 | 비트 연산 후 그 값을 왼쪽 항에 대입한다.num1 |= num2;
num1 = num1 | num2; 와 같음
^=두 항의 ^ 비트 연산 후 그 값을 왼쪽 항에 대입한다.num1 ^= num2;
num1 = num1 ^ num2; 와 같음

연산자 우선 순위

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

우선순위로 인해 원치 않는 값이 나오지 않도록 주의할 필요가 있어 보인다.

좋은 웹페이지 즐겨찾기