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; |
& | 비트 단위 AND | 1 & 1 (둘 다 1이면 1 반환, 하나라도 0이면 0 반환) |
| | 비트 단위 OR | 0 | 0 (둘 다 0이면 0 반환, 하나라도 1이면 1 반환) |
^ | 비트 단위 XOR | 두 개의 비트가 서로 다른 경우에 1을 반환 |
<< | 왼쪽 shift | a<<2 (변수 a를 2비트 만큼 왼쪽으로 이동) 비트를 왼쪽으로 한 칸 이동하면 숫자에 *2를 해준 것과 같은 효과이다. (2진법이므로) |
>> | 오른쪽 shift | a>>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 | 대입 | =, +=, -=, *=, /=, %= | <--- |
우선순위로 인해 원치 않는 값이 나오지 않도록 주의할 필요가 있어 보인다.
Author And Source
이 문제에 관하여(6강. 여러 가지 연산자(2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@migratory_bird/Do-it-Java-Programming-6저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)