移动和否定 sBytes 产生不同类型的促销

Shifting and negating sBytes producing different type promotions

我有我的 sbyte (41),它在二进制中是 101001,然后我将它向左移动两次,它变成 -92,在二进制中是 1111111110100100,这意味着它变成了一个短的。

但我知道,每当一个正的 sbyte 被取反时,它都会被提升为 Int,这在下面的最后 3 行中进行了演示。取反后,92 变成二进制的 11111111111111111111111110100100。

你能告诉我为什么41向左移动后没有变成int吗?

    sbyte ehfveriuvhie1 = 41;
    Console.WriteLine(ehfveriuvhie1 + "\n" + Convert.ToString(ehfveriuvhie1, 2));
    ehfveriuvhie1 <<= 2;
    Console.WriteLine(ehfveriuvhie1 + "\n" + Convert.ToString(ehfveriuvhie1, 2));
    sbyte wrgwaefjvbh= 92;
    Console.WriteLine(-wrgwaefjvbh + "\n" + Convert.ToString(-wrgwaefjvbh, 2));
    Console.WriteLine(wrgwaefjvbh + "\n" + Convert.ToString(wrgwaefjvbh, 2));

如果你只是把它向左移动,它就会变成一个整数。写成ehfveriuvhie1 << 2.

但是你用了<<=,意思是“移位然后存回原来的变量”,那个变量的类型是sbyte,所以最后的结果是sbyte 再一次。