モノクロ ビットマップからビットを読み取っています。16 ビットごとshort
に逆の順序で格納しています。ビットマップのビットが黒の場合は 1 を格納します。白の場合は 0 を格納します。
例: ビットマップの場合: bbbw bbbw bbbw wwww
my short is: 0000 0111 0111 0111
私がこれをやろうとした最初の方法は次のとおりです。
short m;
// ...
Color c = bmp.GetPixel(j, i);
if (c.R == Color.Black)
m |= short.MinValue;
m >>= 1;
// ...
1 つの割り当てとシフトの後、予想される -32768 (1000 0000 0000 0000) を取得しました。
2回目で-16384(1100 0000 0000 0000)になりました。
使用するコードをushort
変更し、if
行をに変更したs |= (ushort)Math.Pow(2, 15);
ところ、動作するようになりました。
私の質問は、.NET で符号ビットがシフトしないのはなぜですか? 符号ビットをシフトする方法はありますか?