【C言語】 0と1を反転する方法をわかりやすく解説

C言語で0と1を反転させるのは、ビット演算子を使って行うことができます。

ビット演算子は、2進数の桁ごとの計算を行うために使用されます。

この記事では、C言語でビット演算子を使って0と1を反転させる方法について詳しく解説していきます。

目次

ビット演算子について

ビット演算子は、2進数で表されるデータの各桁(ビット)を操作するための演算子です。C言語では、以下の6種類のビット演算子が用意されています。

演算子説明
& (AND)2つの値のビット毎の論理積を計算します。
両方のビットが1の場合に1を返し、それ以外の場合には0を返します。
| (OR)2つの値のビット毎の論理和を計算します。
少なくとも1つのビットが1の場合に1を返し、それ以外の場合には0を返します。
^ (XOR)2つの値のビット毎の排他的論理和を計算します。
2つのビットが異なる場合に1を返し、同じ場合には0を返します。
~ (NOT)値のビットを反転させます。
ビットが1の場合は0を、0の場合は1を返します。
<<
(左シフト)
左オペランドのビット列を右オペランドのビット数だけ左方向へシフトします。
シフトされた右側のビットは0で埋められます。
>>
(右シフト)
左オペランドのビット列を右オペランドのビット数だけ右方向へシフトします。
シフトされた左側のビットは、符号ビットによって0または1で埋められます。

0と1を反転する方法

0と1を反転する方法には、XOR(排他的論理和)を用いた方法とNOT(否定)を用いた方法があります。

XOR(排他的論理和)を用いた方法

XOR演算子(^)は、2つのビットが異なる場合に1を返し、同じ場合に0を返します。これを利用して、0と1の値を反転させることができます。以下はサンプルコードです。

int a = 5; // 00000101 (2進数)
int b = a ^ 255; // 11111111 (2進数)
printf("%d", b); // 結果:250 (11111010)

上記の例では、a変数に5(00000101)が代入されています。そしてb変数にa変数と255(11111111)のXOR演算結果が代入されています。この結果、b変数の値は250(11111010)となります。

NOT(否定)を用いた方法

NOT演算子(~)はビットごとに反転させることができます。以下はサンプルコードです。

int a = 5; // 00000101 (2進数)
int b = ~a; // 11111010 (2進数)
printf("%d", b); // 結果:-6 (符号付き整数)

上記の例では、a変数に5(00000101)が代入されています。

そしてb変数に~a演算結果が代入されています。

この結果、b変数の値は-6(11111010)となります(符号付き整数の場合は符号ビットも反転します)。

まとめ

以上からわかるように、「0」と「1」を反転させる簡単な方法は、「XOR」また「NOT」演算子です。

「XOR」や「NOT」以外でも色々あるかもしれませんが、「C言語」であれば、処理速度のことを効力してもどちらかの方法を取るのが無難でしょう。

目次