Перенос знака в .NET

Я читаю биты из монохромного растрового изображения. Я храню каждые 16 бит вshort в обратном порядке. Если бит в растровом изображении черный, сохраните 1. Если белый, сохраните 0.

Например: для растрового изображения: толстушки толстушки толстушки wwww
мой короткий: 0000 0111 0111 0111

Первый способ, которым я пытался это сделать, был:

short m;
// ...
Color c = bmp.GetPixel(j, i);
if (c.R == Color.Black)
    m |= short.MinValue;
m >>= 1;
// ...

После одного назначения и смены я получил ожидаемый -32768 (1000 0000 0000 0000).
После второго раза я получил -16384 (1100 0000 0000 0000).

Я изменил свой код для использованияushort и изменилif линия кs |= (ushort)Math.Pow(2, 15); и теперь это работает.

Мой вопрос: почему знак не будет сдвигаться в .NET? Есть ли способ сдвинуть знак?

Ответы на вопрос(5)

Ваш ответ на вопрос