スポンサーリンク

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

スポンサーリンク