ビットワイズオペレーターとは何ですか?

コンピュータープログラムでは、ビットワイズオペレーターは、表現のビットパターンを操作するオペレーターです。 Bitise and、または、または、排他的または(xor)、右シフトと左シフトは一般的な操作です。ほとんどのコンピュータープログラミング言語には、これらの6つのオペレーターすべてが含まれています。それらは、コンピューターハードウェアを制御するプログラムで個々のビットの設定、クリア、またはフリップに使用されることがよくあります。ビットワイズ演算子は、データ暗号化と圧縮アルゴリズムでも頻繁に使用されます。

一般的なビットワイズ演算子は、通常、C、C ++、Javaなどのプログラミング言語で象徴的に表されます。それらは、プラスサインやマイナスサインなどの算術演算子と同じように、表現で使用されます。ビットワイズ演算子は、アンパサンド、またはパイプ | およびXORで表されます^。補体演算子としても知られていないことは、チルドで示されています。

右のシフト演算子は、右側の右電位を使用して>> を使用します。対照的に、左シフトは、左ポイントの二重通信 <<によって示されます。 Javaには、別の右シフト操作が含まれています。右ポイントトリプルキャレット>>> 。右シフトと左シフトには、真のオペランドが1つしかありません。シフト操作の2番目の値はビットカウントです。ビットワイズオペレーターがどのように機能するかをよりよく理解するために、個人はオペランドをバイナリ数字として視覚化できます。たとえば、補体演算子は、単一のオペランドの各ビットを反対側の状態に反転させます。 1つはゼロになり、ゼロは1つになります。 8ビットバイナリ値00110101の補体は11001010です。

オペレーターには2つのオペランドがあります。少しずつ、各オペランドから対応する1つのビットを使用して論理と操作が実行されます。各ビット操作の結果は、全体のビット位置に配置されます結果。たとえば、およびオペレーターは、1つのオペランドのうち7ビット7を処理し、他のオペランドのビット7を処理します。結果は、全体的な結果のビット7に保存されます。

and and操作では、結果が1つになるためには両方のオペランドビットが必要でなければなりません。そうしないと、結果はゼロです。たとえば、オペランドの8ビットバイナリ値が00110101および11110000の場合、結果は00110000になります。オペレーターの一般的な使用は、結果の特定のビットをゼロにすることです。これは、オペランドの1つにそれらのビット位置にゼロを配置することによって行われます。

または操作では、結果がゼロになるためには、両方のオペランドビットがゼロでなければなりません。それ以外の場合、結果は1つです。 ORオペレーターの一般的な使用は、結果の特定のビットをそれに設定することです。これは、オペランドの1つにそれらのビット位置に配置することによって行われます。 XOR操作の場合、両方のオペランドビットがゼロの場合、または両方のオペランドビットが1つの場合、結果はゼロです。

左シフトa右シフト指定されたビット位置の数によって左または右のオペランドのビットを移動します。論理的な正しいシフトは、シフトの一部としてゼロを左のビットに移動します。算術右シフトは、シフト後に同じ位置にシフトする前に、左端のビット(サインビット)をコピーします。元のビットも残りとともに正しくシフトされます。どちらのタイプの左シフトもゼロを右端に移動します。

オペランドが右シフトされている場合、シフトの前の右端は単に捨てられます。同様に、左シフトが処分される前の左端のビット。オペランドのもう一方の端に包まれません。

ビットワイズシフト操作は、言語および実装依存です。たとえば、CおよびC ++では、オペランドが署名されていない整数である場合、>> および <<論理シフトを実行します。オペランドが署名された整数である場合、代わりに算術シフトが行われる可能性があります。 Javaでは、すべてのオペランドが署名されていると見なされ、算術があります>> および <<では常にeaticシフトが実行されます。 >>> 演算子は論理的な正しいシフトに使用されますが、慎重にタイプキャストせずに代わりに算術的な正しいシフトを誤って行うことはまだ可能です。

合併症は、オペランドの長さが異なる場合、または一部が署名され、一部が署名されていない場合にも発生する可能性があります。複雑な式の中央にあるビットワイズ演算子と数値定数は、予想どおりに評価されない場合があります。式の各量のサイズと署名/署名/署名の性質を指定するように注意する必要があります。これは、プログラムコードの特定の変数タイプへの慎重なタイプキャストまたは暫定的な割り当てで実行できます。

他の言語

この記事は参考になりましたか? フィードバックをお寄せいただきありがとうございます フィードバックをお寄せいただきありがとうございます

どのように我々は助けることができます? どのように我々は助けることができます?