スポンサーリンク
nビット目に値を書き込む
参考:[c言語]nビット目を取得するマクロ(サンプルコード)
nビット目に1を書き込むマクロです。
1を左にnシフトして、orすればOKです。
#define SET_NBIT_ON(a, n) ( (1 << (n)) | (a) )
nビット目に0を書き込むマクロです。
1を左にnシフトして反転させたあと、andすればOKです。
#define SET_NBIT_OFF(a, n) ( ~(1 << (n)) & (a) )
複数のビットに1を書き込む場合。
1にしたいビットを1にして、orすればOKです。
int num = 4 | 3;
複数のビットに0を書き込む場合。
0にしたいビットを0、それ以外を1にして、andすればOKです。
num = 7 & ~3;
スポンサーリンク
サンプルコード
下記がサンプルコードになります。
$ cat sample.c #include <stdio.h> #define SET_NBIT_ON(a, n) ( (1 << (n)) | (a) ) #define SET_NBIT_OFF(a, n) ( ~(1 << (n)) & (a) ) int main(){ printf("%d\n", SET_NBIT_ON(4, 0) ); printf("%d\n", SET_NBIT_ON(4, 1) ); printf("%d\n", SET_NBIT_OFF(7, 0) ); printf("%d\n", SET_NBIT_OFF(7, 1) ); int num = 4 | 3; printf("%d\n", num); num = 7 & ~3; printf("%d\n", num); return 0; }
下記が実行結果になります。
$ gcc -o sample sample.c $ ./sample 5 6 6 5 7 4
スポンサーリンク