2

ビットシフトを行うときに特定のバイトに格納されている値を取得する前に、数値をマスクする必要があるかどうかを知りたいです。

たとえば、次のコードを考えてみましょう。

short b1 = 1;
short b2 = 2;
short b0 = (short)((b1 << 8) | b2);         //store two values in one variable

Console.WriteLine(b0);                      //b1 and b2 combined
Console.WriteLine((b0 & (255 << 8)) >> 8);  //gets the value of b1

私に関する限り、右シフトを実行すると、シフトしたビット数より少ないすべてのビットがドロップされます。したがって、8ビット右にシフトb0すると、の8ビットがドロップされ、 。b2だけが残りますb1

Console.WriteLine(b0 >> 8);  //this also gets b1!!

知りたいのですが、シフトする前にマスクb0して値を取得する必要がありますか?255 << 8b1

注意:値を取得する前にマスキングするために私が考えることができる唯一の必要性は、このコードが使用される
値を取り戻そうとするなど、上位バイトに格納されている何かがあるかどうかです。b2

Console.WriteLine(b0 & 255);  //gets the value of b2
4

1 に答える 1

2

知りたいのですが、b1の値を取得するためにシフトする前に、b0を255 << 8でマスクする必要がありますか?

いいえ、必要ありません。したがって、コンパイラはマスキングを省略します。一部の人々は、コードを理解しやすくしたり、想像上の障害シナリオからコードを保護したりすると考えています。それは完全に無害です。

于 2012-08-08T01:16:53.243 に答える