Alterando o bit de sinal no .NET

Estou lendo bits de um bitmap monocromático. Eu estou armazenando a cada 16 bits em umshort na ordem inversa. Se o bit no bitmap for preto, armazene um 1. Se branco, armazene um 0.

Por exemplo: para bitmap: bbbw bbbw bbbw wwww
meu short é: 0000 0111 0111 0111

A primeira maneira que tentei fazer isso foi:

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

Após uma atribuição e turno, recebi o esperado -32768 (1000 0000 0000 0000).
Após a 2 ª vez recebi -16384 (1100 0000 0000 0000).

Eu mudei meu código para usarushort e mudou oif linha paras |= (ushort)Math.Pow(2, 15); e agora funciona.

Minha pergunta é: por que o sinal não vai mudar no .NET? Existe uma maneira de mudar o bit de sinal?

questionAnswers(5)

yourAnswerToTheQuestion