시프트 연산( <<, >> )
- 시프트 연산을 이용하면 1을 오른쪽으로 5칸 또는 왼쪽으로 5칸 이동 시킬 수 있다.
- 또한 시프트 연산한 값을 더할 수도 있다.
논리 연산( &, | )
- 만약에 5개의 칸을 전부 1로 만들고 싶다면 1<<5(100000)에 -1을 하면 된다.
- &(and) 연산을 이용하면 두 개의 값이 1인 경우 1을 아닌 경우 0으로 만든다.
(e의 경우 a와 d의 오른쪽으로부터 3, 5번째 칸은 1로, 다른 칸의 경우 0이 된다.) - |(or) 연산을 이용하면 두 개의 값 중 하나라도 1이 있는 경우 1을 아닌 경우 0으로 만든다.
(f의 경우 a와 b의 오른쪽으로부터 3, 5번째 칸은 1로, 다른 칸의 경우 0이 된다.)
비트 연산의 응용
- c의 값에 *2를 해주게 된다면 왼쪽으로 한 칸씩 이동이 된다.
- 반대로 c의 값에 /2를 해주게 된다면 오른쪽으로 한 칸씩 이동이 된다.
'IT > 알고리즘 및 자료구조' 카테고리의 다른 글
[알고리즘 정리] 최장 증가 수열(LIS,Largest Increasing Sequence) 알고리즘 (2) | 2018.07.16 |
---|---|
[알고리즘 정리] 최소 신장 트리(MST, Minumum Spanning Tree) 알고리즘(프림 알고리즘) (0) | 2018.06.03 |
[알고리즘] STL lower_bound(), upper_bound(), equal_range() (0) | 2018.06.01 |
[알고리즘 정리] CCW(Counter Clock Wise) 알고리즘 (0) | 2018.05.31 |
[알고리즘 정리] 외판원 순회 문제(Traveling Salesperson Problem, TSP) (0) | 2018.05.31 |