2의 n제곱 판별

임의의 정수 n이 2의 거듭제곱인지 판별하기

(n & (n-1))

n이 2

  1. n(2)의 이진수 10

  2. n-1(1)의 이진수 01

  3. (n&(n-1)) = 00

n이 8

  1. n(8)의 이진수 1000

  2. n-1(7)의 이진수 0111

  3. (n&(n-1)) = 00

n이 5

  1. n(5)의 이진수 101

  2. n-1(4)의 이진수 100

  3. (n&(n-1)) = 10

(n&(n-1)) 식 0도 true가 되므로 0은 예외처리를 해야한다.