0

重複の可能性:
C++ の「<<」演算子とは?

私が見ているコードでは、次のことが行われます。

... (header[4] << 8) + header[5] ...

私はプログラミングにかなり慣れていないので、以前に << 演算子を見たことがありません。グーグルは結果を提供しませんでした。簡単な指針をいただければ幸いです。

4

1 に答える 1

5

<<演算子は、ビットをN ビット分にシフトします。N は演算子の後に続きます。あなたの例では、アドレスのビットはheader[4]8ビット左にシフトされます。

これが良いのは、2^8 = 256 であるため、効果的に 256 を掛けることになることです。右にシフトした場合、 の値は 2^8 = 256 で除算ます。header[4]

実際のビットレベルの例:

  • 2 の値 (2 進数で 0010)を 2 ビットにシフトすると 1000 になり、値は 8 になります。
  • 値 7 (2 進数で 0111)を 2 ビットにシフトすると 0001) になり、値は 1 になります (7/4 は 1.75 であり、整数の 2 進数値で小数を表現する方法がないため切り捨てられます)。
  • 31(2進数で11110)の値を3ビット左シフトすると00011になり、結果は3になります(実際は3.785になりますが、切り捨てられます)。

したがって、最終的には、ビット シフトは乗算 (左にシフト) または除算 (右にシフト) のいずれかを意味することがよくあります。ビットシフト、またはビットシフトを乗算に置き換えます。コンパイラは、多くの場合、乗算と除算をビット シフトの数に置き換えることを好みます。これは、コンピューターにとってビット シフトは、値の実際の乗算または除算を実際に行うよりもはるかに高速であるためです。

于 2012-11-10T16:04:35.340 に答える