cleanUrl: /posts/about-the-bit-operation

코드를 최적화 할 때 유용하게 사용되는 기법중에 하나이다. 비트 연산은 손으로 풀 수 있을만큼 익숙할 필요가 있다. 알고리즘에서 Big O를 모두 최적화 했을때, 배열을 다뤄야 할 때 비트연산을 고민하면 더 좋은 성능을 기대할 수 있다.

이 컨텐츠는 코딩 인터뷰 완전분석 에서 정말 재미있게 읽었던 비트연산 부분을 발췌했다.

코딩 인터뷰 완전 분석

손으로 비트 조작 해보기

  1. 아래 설명하는 트릭으로 풀기
  2. 10진수로 변경하고 계산한 후 2진수로 변경한다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/cdcfb551-4ff0-4fc7-b39f-eb356d25f17d/Screen_Shot_2020-11-26_at_23.11.30.png

위 표에서 가장 오른쪽 열 4개만 살펴본다.

  1. 0110 + 0110 은 0110 * 2 와 같고, 0110 을 왼쪽으로 한번 shift 하는것과 같다.
  2. 0100 = 4, 0100 * 4 는 왼쪽으로 두번 shift 하는것과 같다.
  3. 이 연산은 두개를 따로 생각해야 한다. a ^ (~a) 는 항상 1이 된다.
  4. ~0 은 모두 1이 된다. (1111) 이 값은 and 연산하면 1000 이다.

비트 조작을 할 때 알아야 할 사실들과 트릭들

암기하기 보단 이해가 필요하다.

1s 는 1111 이고, 0s 는 0000 이다. 편의상 4자리 2진수라 가정한다

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d2175be8-bacc-4bed-a319-a8eac7f1ad95/Screen_Shot_2020-11-26_at_23.58.04.png

한 비트에서 일어나는 일이 다른 비트에 전혀 영향을 주지 않는다.