Convert.ToString()到二进制格式不能按预期工作

Fuz*_*rog 13 c# binary

int i = 20;
string output = Convert.ToString(i, 2); // Base2 formatting
i = -20;
output = Convert.ToString(i, 2);
Run Code Online (Sandbox Code Playgroud)
Value   Expected                            Actual
20      00000000000000000000000000010100    10100
-20     10000000000000000000000000010100    11111111111111111111111111101100

我可以看到,20的二进制输出可能已被截断,但我不理解-20的输出.我基于base2表示法的期望加上一个信念,即整数的带符号元素在第一个最左边的数字中表示.0表示正数,1表示负数.有人可以解释结果,特别是-20的结果吗?

Ode*_*ded 33

.NET中的负数以二进制表示为二进制补码.

从MSDN - Convert.ToString方法(Int32,Int32):

如果value为负且toBase为2,8或16,则返回的字符串使用二进制补码表示


Ren*_*Pet 6

这基本上与其他人发布的答案相同,只是封装在一个方法中。

  /// <summary>
  /// Method to convert an integer to a string containing the number in binary. A negative 
  /// number will be formatted as a 32-character binary number in two's compliment.
  /// </summary>
  /// <param name="theNumber">self-explanatory</param>
  /// <param name="minimumDigits">if binary number contains fewer characters leading zeros are added</param>
  /// <returns>string as described above</returns>
  public static string IntegerToBinaryString(int theNumber, int minimumDigits)
  {
     return Convert.ToString(theNumber, 2).PadLeft(minimumDigits, '0');
  }
Run Code Online (Sandbox Code Playgroud)


小智 5

int value = 31;
string binary = Convert.ToString(value, 2);
Console.WriteLine(binary.PadLeft(8, '0'));          // Outputs "00011111"
Run Code Online (Sandbox Code Playgroud)


小智 5

对于整数-20是11111111111111111111111111101100系统默认使用2的Compliment.1的赞美不适合计算.

(2的恭维是所有位加1的反转)

在2的Compliment中,它将使20 +( - 20)= 0,可以轻松地计算数学而无需担心正面或负面.

例如,在signed char中:15 = 00001111,-18 = 2的赞美(00010010)= 11101101 + 1 = 11101110

00001111 +11101110 = 11111101

由于第一位是1,我们知道它是负值.让我们做一个反向2的赞美.

11111101 - 1 = 11111100 => - (00000011)它给出-3其中15 +( - 18)= -3

  • 这是Compl-e-ment,不是Compl-i-ment! (3认同)