我的理解是没有ToString重载需要一个sbyte并且它被明确地转换为short。但这些领先的1来自哪里?
Console.WriteLine("{0}", Convert.ToString((sbyte)-128, 2));
>1111111110000000
谢谢, 嘲笑
答案 0 :(得分:6)
你的理解是完全正确的。
1s是由名为“sign extension”的东西引起的。它是2s complement二进制算法工作方式的副作用。
答案 1 :(得分:0)
您实际上正在调用Convert.ToString的重载,定义为:
Convert.ToString(short value, int base)
有符号字节使用第一位作为符号 - 您首先将其隐式转换为short,因为存储二进制的方式保持前置1以维持负性。 (即10000字节的sbyte形式是二进制的-128)。