C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++のシフト演算子とは何ですか?


ビット単位のシフト演算子は、shift_expressionのビットを右に移動する右シフト演算子(>>)と、左シフト演算子(<<)です。左にshift_expressionのビット。

左シフト演算子を使用すると、shift-expressionのビットは、additive-expressionで指定された位置の数だけ左にシフトされます。シフト操作によって空になったビット位置はゼロで埋められます。左シフトは論理シフトです(符号ビットを含め、端からシフトされたビットは破棄されます)。

右シフト演算子を使用すると、shift-expressionのビットパターンがadditive-expressionで指定された位置の数だけ右にシフトされます。符号なし数値の場合、シフト操作によって空にされたビット位置はゼロで埋められます。符号付き数値の場合、符号ビットは空いたビット位置を埋めるために使用されます。つまり、数値が正の場合は0が使用され、数値が負の場合は1が使用されます。

#include<iostream>
using namespace std;
int main() {
   int a = 1, b = 3;
   
   // a right now is 00000001
   // Left shifting it by 3 will make it 00001000, ie, 8
   a = a << 3;
   cout << a << endl;
   
   // Right shifting a by 2 will make it 00000010, ie, 2
   a = a >> 2;
   cout << a << endl;
   return 0;
}
出力

これにより、出力が得られます-

8
2

これらの演算子は、負の数では非常に異なる動作をすることに注意してください。符号付きの負の数の右シフトの結果は、実装に依存します。符号付き数値を左シフトして符号ビットが影響を受ける場合、結果は未定義です。

左側の値に直接値を割り当てるために使用できる2つの複雑な演算子もあります。これらは<<=演算子と>>=演算子です。

シフト演算子の詳細な検査については、https://msdn.microsoft.com/en-us/library/336xbhcz.aspxを参照してください。


  1. C#の代入演算子とは何ですか?

    演算子は、特定の数学的または論理的操作を実行するようにコンパイラーに指示する記号です。 以下は、C#の代入演算子です。 オペレーター 説明 例 = 単純な代入演算子、右側のオペランドから左側のオペランドに値を代入します C =A + Bは、A+Bの値をCに割り当てます + = AND代入演算子を追加します。これは、右のオペランドを左のオペランドに追加し、結果を左のオペランドに割り当てます。 C +=AはC=C+Aと同等です -= 減算AND代入演算子、左オペランドから右オペランドを減算し、その結果を左オペランドに代入します C-=AはC=C --Aと同等です

  2. C#の左シフトおよび右シフト演算子(>>および<<)とは何ですか?

    ビット単位の左シフト演算子 左のオペランドの値は、右のオペランドで指定されたビット数だけ左に移動します。 ビット単位の右シフト演算子 左のオペランドの値は、右のオペランドで指定されたビット数だけ右に移動します。 以下は、ビット単位の左シフト演算子と右シフト演算子の操作方法を示す例です- 例 using System; namespace Demo {    class Program {       static void Main(string[] args) {         &nbs