ビットシフトを行うときに特定のバイトに格納されている値を取得する前に、数値をマスクする必要があるかどうかを知りたいです。
たとえば、次のコードを考えてみましょう。
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 << 8
b1
注意:値を取得する前にマスキングするために私が考えることができる唯一の必要性は、このコードが使用される
値を取り戻そうとするなど、上位バイトに格納されている何かがあるかどうかです。b2
Console.WriteLine(b0 & 255); //gets the value of b2