비트 연산자(bitwise operator)
비트 연산자는 피연산자를 비트단위로 논리 연산한다.
그런데 쓸 일이 거의 없으니 그냥 교양 정도로 보면 된다.
|(OR연산자) 피연산자 중 한 쪽의 값이 1이면, 1을 결과로 얻는다. 그 외에는 0을 얻는다.
&(AND연산자) 피연산자 양 쪽이 모두 1이어야만 1을 결과로 얻는다. 그 외에는 0을 얻는다.
^(XOR연산자) 피연산자의 값이 서로 다를 때만 1을 결과로 얻는다. 같을 때는 0을 얻는다.
x | y | x|y | x&y | x^y |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 1 | 0 | 1 |
0 | 1 | 1 | 0 | 1 |
0 | 0 | 0 | 0 | 0 |
연산자 ^는 배타적 XOR(eXclusive OR)라고 하며, 피연산자의 값이 서로 다른 경우, 즉 배타적인 경우에만 참(1)을 결과로 얻는다.
비트 연산자 |
0xAB | 0xF = 0xAF | 1 0 1 0 1 0 1 1 |) 0 0 0 0 1 1 1 1 |
0xAB 0xF |
1 0 1 0 1 1 1 1 | 0xAF |
|(OR)는 주로 특정 비트의 값을 변경할 때 사용한다.
비트 연산자 |
0xAB & 0xF = 0xB | 1 0 1 0 1 0 1 1 &) 0 0 0 0 1 1 1 1 |
0xAB 0xF |
0 0 0 0 1 0 1 1 | 0xB |
&(AND)는 주로 특정 비트의 값을 뽑아낼 때 사용한다.
비트 연산자 |
0xA4 ^ 0xF = 0xAB | 1 0 1 0 0 1 0 0 ^) 0 0 0 0 1 1 1 1 |
0xA4 0xF |
1 0 1 0 1 0 1 1 | 0xAB |
^(XOR)는 두 피연산자의 비트가 다를 때만 1이 된다.
비트 전환 연산자 ~
x | ~x |
1 | 0 | |
0 | 1 |
~는 주로 특정 비트의 값을 뽑아낼 때 사용한다.
주의할 점은 비트 연산자 '~'에 의해 '비트 전환'되고 나면, 부호가 있는 타입의 피연산자는 부호가 반대로 변경된다.
쉬프트 연산자 << >>
이 연산자는 피연산자의 각 자리를 이동한다고해서 쉬프트 연산자(shift operator)라고 이름 붙여졌다.
10진수 8은 2진수로표현한 뒤 쉬프트 연산자를 적용하면,
<< | >> | |
연산전 | 0 0 0 0 1 0 0 0 | 0 0 0 0 1 0 0 0 |
연산후 | 0 0 0 1 0 0 0 0 | 0 0 0 0 0 1 0 0 |
각 각 연산 후 8이 16과 4가 되었다.
또한 쉬프트 연산자의 범위를 벗어난 값은 버려지고, 0이 된다. 이로써 알 수 있는 것은
x << n은 x * 2ⁿ의 결과와 같다.
x >> n은 x / 2ⁿ의 결과와 같다.
'JAVA 03강 연산자(Operator) > 논리 연산자(bitwise operator)' 카테고리의 다른 글
논리 연산자(logical operator) (0) | 2021.07.12 |
---|