【マクロ定義】——整数が2の累乗かどうかを判定する

基本的な考え方

f = v & (v - 1) == 0;

この方法0は間違っています、改善後

f = v && !(v & (v - 1));

コード

#include <stdio.h>

#define is_power(v)         ((v) && !((v) & ((v) - 1)))

int main(int argc, char *argv[])
{
    
    
   printf("%d\n", is_power(0));
   printf("%d\n", is_power(1));
   printf("%d\n", is_power(2));
   printf("%d\n", is_power(3));
   printf("%d\n", is_power(4));
   printf("%d\n", is_power(8));

   return 0;
}

結果

0
1
1
0
1
1

参考コード: http://graphics.stanford.edu/~seander/bithacks.html

おすすめ

転載: blog.csdn.net/tyustli/article/details/132328196