비트 연산자 (bitwise operator)
▶ 비트 연산자 (bitwise operator)?
※ bitwise : (컴퓨터) 비트에 관한, 비트의
- 비트 연산자는 논리 연산자와 비슷하지만, 비트(bit) 단위로 논리 연산을 할 때 사용하는 연산자입니다.
또한, 비트 단위로 왼쪽이나 오른쪽으로 전체 비트를 이동하거나, 1의 보수를 만들 때도 사용됩니다.
비트 연산자 | 설명 |
& | 대응되는 비트가 모두 1이면 1을 반환합니다. (비트 AND 연산) |
| | 대응되는 비트 중에서 하나라도 1이면 1을 반환합니다. (비트 OR 연산) |
^ | 대응되는 비트가 서로 다르면 1을 반환합니다. (XOR 연산) |
~ | 비트를 1이면 0으로, 0이면 1로 반전시킵니다. (비트 NOT 연산, 1의 보수) |
<< | 명시된 수만큼 비트들을 전부 왼쪽으로 이동시킵니다.. (left shift 연산) |
>> | 부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동시킵니다. (right shift 연산) |
>>> | 지정한 수만큼 비트를 전부 오른쪽으로 이동시키며, 새로운 비트는 전부 0이 됩니다. |
▶ 비트 AND, OR, XOR, NOT, 연산
- 비트 AND 연산 (&)
- 두 비트가 모두 1일 때만 1을 반환하며 다른 경우는 모두 0을 반환합니다.
0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
& | & | & | & | & | & | & | & |
0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 |
↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ |
0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
- 비트 OR 연산 ( | )
- 두 비트중 하나라도 1이면 1일 반환하며 두 비트가 모두 0일때만 0을 반환합니다.
0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
| | | | | | | | | | | | | | | |
0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 |
↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ |
0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 |
- 비트 XOR 연산 ( ^ )
- 대응되는 두 비트가 서로 다르면 1을 반환하고, 서로 같으면 0을 반환합니다.
0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
^ | ^ | ^ | ^ | ^ | ^ | ^ | ^ |
0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 |
↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ |
0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 |
- 비트 NOT 연산 ( ~ )
- 해당 비트가 1이면 0을 반환하고, 0이면 1을 반환합니다.
0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
~ | ~ | ~ | ~ | ~ | ~ | ~ | ~ |
↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ |
1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
▶ 비트 연산에 대한 예시
public class Bitewise{
public static void main(String[] args){
int num1 = 8;
System.out.println("~ 연산자에 의한 결과 : " + ~num1);
System.out.println("<< 연산자에 의한 결과 : " + (num1 << 2));
System.out.println(">>> 연산자에 의한 결과 : " + (num1 >>> 2));
}
}
-----------------------------------------------------------------------------
출력 결과
~ 연산자에 의한 결과 : -9
<< 연산자에 의한 결과 : 32
>>> 연산자에 의한 결과 : 2
- ~ 연산자에 의한 결과 : ~num1
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
~ | ~ | ~ | ~ | ~ | ~ | ~ | ~ |
↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ |
1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 |
-> 11110111 = -9
- << 연산자에 의한 결과 : (num1 << 2)
- 원래의 비트 오른쪽에 숫자만큼 0이 생기며 그만큼 비트를 전부 왼쪽(부등호 방향)으로 이동시킵니다.
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | ||
↙ | ↙ | ↙ | ↙ | ↙ | ↙ | ↙ | ↙ | ||
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
-> 00100000 = 32
- >>> 연산자에 의한 결과 : (num1 >>> 2)
- - 원래의 비트 왼쪽에 숫자만큼 0이 생기며 그만큼 비트를 전부 오른쪽(부등호 방향)으로 이동시킵니다.
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | ||
↘ | ↘ | ↘ | ↘ | ↘ | ↘ | ↘ | ↘ | ||
0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
-> 00000010 = 2
'Programing > JAVA' 카테고리의 다른 글
Java Control (조건문) (0) | 2021.07.19 |
---|---|
Java Operator (삼항 연산자) (0) | 2021.07.19 |
Java Operator (논리 연산자) (0) | 2021.07.19 |
Java Operator (비교 연산자) (0) | 2021.07.19 |
Java Operator (증감 연산자) (0) | 2021.07.19 |