마지막 수정 : 2022/01/09
참고 : http://www.tcpschool.com/c/c_refer_bitCalculation
비트 단위 연산(bitwise operation)
컴퓨터는 모든 데이터를 비트(bit) 단위로 표현하고 처리합니다.
비트 단위 연산을 통해 사용되는 메모리 공간을 줄이거나, 성능의 향상을 기대할 수 있기 때문이다.
비트 연산자
비트 | 연산자설명 |
~ | 비트를 1이면 0으로, 0이면 1로 반전시킴. (비트 NOT 연산) |
& | 대응되는 비트가 모두 1이면 1을 반환함. (비트 AND 연산) |
| | 대응되는 비트 중에서 하나라도 1이면 1을 반환함. (비트 OR 연산) |
^ | 대응되는 비트가 서로 다르면 1을 반환함. (비트 XOR 연산) |
<< | 지정한 수만큼 비트들을 전부 왼쪽으로 이동시킴. (left shift 연산) |
>> | 지정한 수만큼 비트들을 전부 오른쪽으로 이동시킴. (right shift 연산) |
비트 연산자 진리표
비트1 | 비트2 | 비트1 & 비트2 | 비트1 | 비트2 | 비트1 ^ 비트2 | ~ 비트1 | ~ 비트2 |
0 | 0 | 0 | 0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 | 0 | 1 |
1 | 1 | 1 | 1 | 0 | 0 | 0 |
비트 NOT 연산자
비트 NOT 연산자(~)는 모든 bit를 보수로 바꿔주는 연산자이다.
예를들어 1111이면 0000으로 바꿔주고, 1010은 0101로 바꿔준다.
비트 AND 연산자
비트 AND 연산자(&)는 비교하려는 두 비트가 모두 1일때만 1을 return한다.
예를들어 0101과 0110을 비교하면 0100을 return한다.
비트 OR 연산자
비트 OR 연산자(|)는 비교하려는 두 비트중 하나라도 1이면 1을 return한다.
예를들어 0101과 0110을 비교하면 0111을 return한다.
비트 XOR 연산자
비트 XOR 연산자(^)는 배타적 논리합(exclusive OR)이라고도 불리며, 두 비트중 하나만 1일때 1을 return한다.
따라서 모든 비트를 반전시키는 ~연산자와 달리 지정한 비트만 반전시킬 수 있다.
1로 설정된 비트와 XOR 연산을 한 비트만 반전되기 때문이다.
왼쪽 시프트 연산자
왼쪽 시프트 연산자(<<)는 지정한 수 만큼 모든 비트를 전부 왼쪽으로 이동시킨다.
비트를 왼쪽으로 이동시키게 되면 맨 왼쪽에 있던 비트들은 지정한 개수만큼 모두 버려지게 된다.
그리고 맨 오른쪽은 이동시킨만큼 0이 채워지게 된다.
따라서 왼쪽으로 1칸씩 이동할때마다 2배가 된다.
(맨 앞이 부호비트인데 맨 앞 2비트가 10일시 한칸 옮기면 부호가 바뀌는지..?)
곱하기를 속도가 더빠른 시프트 연산으로 할 수 있다.
오른쪽 시프트 연산자
오른쪽 시프트 연산자(>>)는 지정한 수 만큼 모든 비트를 전부 오른쪽으로 이동시킨다.
비트를 오른쪽으로 이동시키게 되면 맨 오른쪽에 있던 비트들은 지정한 개수만큼 모두 버려지게 된다.
그리고 맨 왼쪽은 이동시킨만큼 0이 채워지게 된다.
오른쪽 시프트 연산자는 왼쪽 연산자와 시스템마다의 차이점이 있다.
일부 시스템에서는 부호비트가 시프트 연산에 포함되고 일부에서는 포함되지 않기 때문이다.
따라서 최상위 부호 비트가 중요한 의미가 있을땐 가급적 하지 않는것이 좋다.
나누기를 속도가 더빠른 시프트 연산으로 할 수 있다.
'ALGORITHM > etc' 카테고리의 다른 글
에라토스테네스의 체 (0) | 2022.01.16 |
---|