为什么Convert.ToString((sbyte)-128,2)前置1?

时间:2011-10-20 21:41:15

标签: c# tostring

我的理解是没有ToString重载需要一个sbyte并且它被明确地转换为short。但这些领先的1来自哪里?

Console.WriteLine("{0}", Convert.ToString((sbyte)-128, 2));

>1111111110000000

谢谢, 嘲笑

2 个答案:

答案 0 :(得分:6)

你的理解是完全正确的。

1s是由名为“sign extension”的东西引起的。它是2s complement二进制算法工作方式的副作用。

答案 1 :(得分:0)

您实际上正在调用Convert.ToString的重载,定义为:

Convert.ToString(short value, int base)

有符号字节使用第一位作为符号 - 您首先将其隐式转换为short,因为存储二进制的方式保持前置1以维持负性。 (即10000字节的sbyte形式是二进制的-128)。