if (n & (n-1)) == 0

# 忘れないようにメモ

  • 0xF = 0b11110x一文字は 4bits
  • 0xFF = 0b1111 11110x二文字は 8bits(1byte)

# if (n & (n-1)) == 0

1
2
3
4
if        n = xxxxx 1000
then  n - 1 = xxxxx 0111
------------------------
n & (n - 1) = ????? 0000

なので,if (n & (n-1)) == 0が true なら?????00000であり,つまりxxxxx00000であるから,

1
n = 00000 1000

ということになる.

if (n & (n-1)) == 0は「nが 2 のべき乗であるか」を確認している.

Hugo で構築されています。
テーマ StackJimmy によって設計されています。