スポンサーリンク

nビット目を取得するマクロ

参考:[c言語]nビット目を取得するマクロ(サンプルコード)

nビット右にシフトして、1でandすればできますね。

下記はマクロの注意点の参考記事です。
参考:[c言語]関数マクロの変数はカッコ()を付けたほうが良い

#define GET_NBIT(a, n) ( ((a) >> (n)) & 1 )

さらに、0〜3ビット目を取得するマクロになります。

各マクロからnビット目を取得するマクロに置き換えます。

#define GET_0BIT(a) GET_NBIT(a, 0)
#define GET_1BIT(a) GET_NBIT(a, 1)
#define GET_2BIT(a) GET_NBIT(a, 2)
#define GET_3BIT(a) GET_NBIT(a, 3)

スポンサーリンク

サンプルコード

下記がサンプルコードになります。

$ cat sample.c 
#include <stdio.h>

#define GET_NBIT(a, n) ( ((a) >> (n)) & 1 )

#define GET_0BIT(a) GET_NBIT(a, 0)
#define GET_1BIT(a) GET_NBIT(a, 1)
#define GET_2BIT(a) GET_NBIT(a, 2)
#define GET_3BIT(a) GET_NBIT(a, 3)

int main(){
	printf("%d\n", GET_0BIT(6));
	printf("%d\n", GET_1BIT(6));
	printf("%d\n", GET_2BIT(6));
	printf("%d\n", GET_3BIT(6));
	
	return 0;
}

下記が実行結果になります。
$ gcc -o sample sample.c
$ ./sample 
0
1
1
0

スポンサーリンク