最初のバイト = 2 (dec)、2 番目のバイト = 1 (dec) とします。
したがって、最初のバイトは 257 (10 進数) を表します。したがって、2 番目のバイトは 1 (10 進数) を表します。
したがって、(合計) 16 ビット値は 258 (10 進数) です。
だから私がするなら:
(byte1*256)+byte2
それはそれを行うための「適切な」方法ですか?それとももっと良い方法がありますか?
ありがとう、T.
最近のほとんどのオプティマイザーでは、それを行う「適切な」方法はありません。コードは、システムで最速のものに変換されます。
byte1<<8 | byte2
+
- の代わりにa を使用することを除いて、上記と同じ|
ソースコードでは、人間の読者に意図を明確にすることに集中する必要があり256
ます。読者にとって最も意味のある乗算である場合は、乗算を使用します。ビット シフトの場合は、ビット シフトを使用します。コンパイラは、コードを可能な限り効率的にします。
これはうまくいくはずです:
(byte1<<8) | byte2
しかし、私はここに落とし穴があるかもしれないと考えています。byte1
データ型とbyte2
データ型のサイズが 1 バイト (つまり 8 ビット) しかない場合、シフトはおそらく役に立ちません。
私はあなたがそれをした方法は完全にうまくいくはずだと思います。ただし、キックの場合、次のようなものもおそらく機能します。
int16 total = byte1;
total = (total<<8) | byte2
ビットをシフトするシフト演算子を使用できます: (byte1 << 8) + byte2
左にシフトすることは、2 の累乗を掛けることと同じです。上の例では、
(2 << 8) は、(0b 10 0000 0000) である (0b 0000 0010 << 8) と同じです。
1 バイトは 8 ビットなので、8 シフトします。