Przesunięcie bitu znaku w .NET

Czytam bity z monochromatycznej mapy bitowej. Przechowuję co 16 bitów w ashort w odwrotnej kolejności. Jeśli bit w mapie bitowej jest czarny, zapisz 1. Jeśli biały, zapisz 0.

Np .: dla bitmapy: bbbw bbbw bbbw wwww
mój skrót to: 0000 0111 0111 0111

Pierwszym sposobem, w jaki próbowałem to zrobić, było:

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

Po jednym zadaniu i zmianie dostałem oczekiwaną -32768 (1000 0000 0000 0000).
Po drugim czasie dostałem -16384 (1100 0000 0000 0000).

Zmieniłem kod, aby go użyćushort i zmieniłif linia dos |= (ushort)Math.Pow(2, 15); a teraz to działa.

Moje pytanie brzmi: dlaczego znak nie przesunie się w .NET? Czy istnieje sposób na przesunięcie bitu znaku?

questionAnswers(5)

yourAnswerToTheQuestion