logo

C のビット演算子

ビット単位の演算子は、データに対してビットレベルで演算を実行するために使用される演算子です。ビットごとの操作を実行することは、ビットレベル プログラミングとも呼ばれます。 0 または 1 の 2 桁で構成されます。主に数値計算で計算を高速化するために使用されます。

C プログラミング言語にはさまざまな種類のビット演算子があります。以下はビット単位の演算子のリストです。

オペレーター 演算子の意味
& ビット単位の AND 演算子
| ビット単位の OR 演算子
^ ビットごとの排他的論理和演算子
1の補数演算子(単項演算子)
<< 左シフト演算子
>> 右シフト演算子

ビットごとの演算子の真理値表を見てみましょう。

バツ そして X&Y X|Y X^Y
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 1

ビット単位の AND 演算子

ビット単位の AND 演算子は、単一のアンパサンド記号 (&) で表されます。 2 つの整数オペランドが (&) 演算子の両側に記述されます。両方のオペランドの対応するビットが 1 の場合、ビットごとの AND 演算の出力は 1 になります。それ以外の場合、出力は 0 になります。

例えば、

 We have two variables a and b. a =6; b=4; The binary representation of the above two variables are given below: a = 0110 b = 0100 When we apply the bitwise AND operation in the above two variables, i.e., a&amp;b, the output would be: Result = 0100 

上記の結果からわかるように、両方の変数のビットが 1 つずつ比較されます。両方の変数のビットが 1 の場合、出力は 1 になり、それ以外の場合は 0 になります。

プログラムを通してビット単位の AND 演算子を理解しましょう。

 #include int main() { int a=6, b=14; // variable declarations printf(&apos;The output of the Bitwise AND operator a&amp;b is %d&apos;,a&amp;b); return 0; } 

上記のコードでは、「a」と「b」という 2 つの変数を作成しました。 「a」と「b」の値はそれぞれ 6 と 14 です。 「a」と「b」のバイナリ値は、それぞれ 0110 と 1110 です。これら 2 つの変数の間に AND 演算子を適用すると、

a AND b = 0110 && 1110 = 0110

Javaのスタック

出力

C のビット演算子

ビット単位の OR 演算子

ビット単位の OR 演算子は、1 つの垂直記号 (|) で表されます。 (|) 記号の両側に 2 つの整数オペランドが記述されます。いずれかのオペランドのビット値が 1 の場合、出力は 1 になり、それ以外の場合は 0 になります。

ネットワークアーキテクチャ

例えば、

 We consider two variables, a = 23; b = 10; The binary representation of the above two variables would be: a = 0001 0111 b = 0000 1010 When we apply the bitwise OR operator in the above two variables, i.e., a|b , then the output would be: Result = 0001 1111 

上記の結果からわかるように、両方のオペランドのビットが 1 つずつ比較されます。いずれかのビットの値が 1 の場合、出力は 1 になり、それ以外の場合は 0 になります。

プログラムを通してビットごとのOR演算子を理解しましょう。

 #include int main() int a=23,b=10; // variable declarations printf(&apos;The output of the Bitwise OR operator a 

出力

C のビット演算子

ビットごとの排他的論理和演算子

ビットごとの排他的 OR 演算子は (^) 記号で表されます。排他的論理和演算子の両側に 2 つのオペランドが記述されます。いずれかのオペランドの対応するビットが 1 の場合、出力は 1 になり、それ以外の場合は 0 になります。

例えば、

 We consider two variables a and b, a = 12; b = 10; The binary representation of the above two variables would be: a = 0000 1100 b = 0000 1010 When we apply the bitwise exclusive OR operator in the above two variables (a^b), then the result would be: Result = 0000 1110 

上記の結果からわかるように、両方のオペランドのビットが 1 つずつ比較されます。いずれかのオペランドの対応するビット値が 1 の場合、出力は 1 になり、それ以外の場合は 0 になります。

プログラムを通してビットごとの排他的論理和演算子を理解しましょう。

 #include int main() { int a=12,b=10; // variable declarations printf(&apos;The output of the Bitwise exclusive OR operator a^b is %d&apos;,a^b); return 0; } 

出力

C のビット演算子

ビット単位の補数演算子

ビット単位の補数演算子は、1 の補数演算子とも呼ばれます。チルダ (~) という記号で表されます。オペランドまたは変数を 1 つだけ取り、オペランドに対して補数演算を実行します。任意のビットに補数演算を適用すると、0 は 1 になり、1 は 0 になります。

例えば、

Javaのプライムノーコード
 If we have a variable named &apos;a&apos;, a = 8; The binary representation of the above variable is given below: a = 1000 When we apply the bitwise complement operator to the operand, then the output would be: Result = 0111 

上記の結果からわかるように、ビットが 1 の場合は 0 に変更され、それ以外の場合は 1 に変更されます。

プログラムを通して補数演算子を理解してみましょう。

 #include int main() { int a=8; // variable declarations printf(&apos;The output of the Bitwise complement operator ~a is %d&apos;,~a); return 0; } 

出力

C のビット演算子

ビット単位のシフト演算子

C プログラミングには 2 種類のビット単位のシフト演算子が存在します。ビット単位のシフト演算子は、左側または右側のビットをシフトします。したがって、ビット単位のシフト演算子は 2 つのカテゴリに分類されると言えます。

  • 左シフト演算子
  • 右シフト演算子

左シフト演算子

ビット数を左にシフトする演算子です。

左シフト演算子の構文は次のとおりです。

 Operand &lt;&lt; n 

どこ、

オペランドは、左シフト演算を適用する整数式です。

ヴィッキー・カウシャルの年齢

n はシフトされるビット数です。

左シフト演算子の場合、「n」ビットが左側にシフトされます。左側の「n」ビットがポップアウトされ、右側の「n」ビットが 0 で埋められます。

例えば、

 Suppose we have a statement: int a = 5; The binary representation of &apos;a&apos; is given below: a = 0101 If we want to left-shift the above representation by 2, then the statement would be: a &lt;&lt; 2; 0101&lt;<2 = 00010100 < pre> <p> <strong>Let&apos;s understand through a program.</strong> </p> <pre> #include int main() { int a=5; // variable initialization printf(&apos;The value of a&lt;<2 is : %d ', a<<2); return 0; } < pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/c-tutorial/51/bitwise-operator-c-5.webp" alt="Bitwise Operator in C"> <p> <strong>Right-shift operator</strong> </p> <p>It is an operator that shifts the number of bits to the right side.</p> <p> <strong>Syntax of the right-shift operator is given below:</strong> </p> <pre> Operand &gt;&gt; n; </pre> <p> <strong>Where,</strong> </p> <p>Operand is an integer expression on which we apply the right-shift operation.</p> <p>N is the number of bits to be shifted.</p> <p>In the case of the right-shift operator, &apos;n&apos; bits will be shifted on the right-side. The &apos;n&apos; bits on the right-side will be popped out, and &apos;n&apos; bits on the left-side are filled with 0.</p> <p> <strong>For example, </strong> </p> <pre> Suppose we have a statement, int a = 7; The binary representation of the above variable would be: a = 0111 If we want to right-shift the above representation by 2, then the statement would be: a&gt;&gt;2; 0000 0111 &gt;&gt; 2 = 0000 0001 </pre> <p> <strong>Let&apos;s understand through a program.</strong> </p> <pre> #include int main() { int a=7; // variable initialization printf(&apos;The value of a&gt;&gt;2 is : %d &apos;, a&gt;&gt;2); return 0; } </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/c-tutorial/51/bitwise-operator-c-6.webp" alt="Bitwise Operator in C"> <hr></2></pre></2>

どこ、

オペランドは、右シフト演算を適用する整数式です。

N はシフトされるビット数です。

右シフト演算子の場合、「n」ビットが右側にシフトされます。右側の「n」ビットがポップアウトされ、左側の「n」ビットが 0 で埋められます。

例えば、

 Suppose we have a statement, int a = 7; The binary representation of the above variable would be: a = 0111 If we want to right-shift the above representation by 2, then the statement would be: a&gt;&gt;2; 0000 0111 &gt;&gt; 2 = 0000 0001 

プログラムを通して理解しましょう。

 #include int main() { int a=7; // variable initialization printf(&apos;The value of a&gt;&gt;2 is : %d &apos;, a&gt;&gt;2); return 0; } 

出力

C のビット演算子