このページの解説は C99 をベースとしています。
以下は目次です。
ある符号無し整数型の値を構成する複数のビットの中の、任意の位置のビットに 1 を立てたいとします。1 を立てるとは、要するに 1 にするということです。
ビット演算は原則的に、符号無し整数型に対して使用します(第49章)
ここでいう「任意のビット」は、特定の1つのビットでもいいですし、2ビット以上連続したり、飛び飛びであったりしてもいいものとします。たとえば、
といった具合です。
あるビットに 1 を立てるには、ビット和(ビットOR)(第49章)を使います。
立てたいビットにだけ “1” を立てた整数を用意し(これを BITS とします)、ターゲットの整数とビット和を使って結合します。
|= BITS;
ターゲットの整数
あるいは
= ターゲットの整数 | BITS; ターゲットの整数
実際に試してみます。
#include <stdio.h>
int main(void)
{
unsigned char n1 = 0xf0;
unsigned char n2 = 0x80;
unsigned char n3 = 0x7f;
// 一番上位のビットに 1 を立てる
("%x\n", (n1 | 0x80));
printf("%x\n", (n2 | 0x80));
printf("%x\n", (n3 | 0x80));
printf("----");
puts
// 下位から数えて、3~7 ビット目の範囲に 1 を立てる
("%x\n", (n1 | 0x3c));
printf("%x\n", (n2 | 0x3c));
printf("%x\n", (n3 | 0x3c));
printf("----");
puts
// 奇数ビットすべてに 1 を立てる
("%x\n", (n1 | 0x55));
printf("%x\n", (n2 | 0x55));
printf("%x\n", (n3 | 0x55));
printf("----");
puts}
実行結果:
f0
80
ff
----
fc
bc
7f
----
f5
d5
7f
----
桁が多いと分かりづらいので、ここでは unsigned char型を使って、8bit の符号無し整数型で試しています。もっと大きい型を使っても、ビットの数が増えるだけで、やり方はなんら変わりません。
また、結果だけが見たいので、変数の値を書き換えないようにしています。変数の値を変えたいのなら、(n1 | 0x80)
であれば n1 |= 0x80;
のようにすればいいです。
return 0;
を削除(C言語編全体でのコードの統一)
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |