为什么转换.ToString((sbyte)- 128,2) preend 1's

本文关键字:preend ToString 转换 sbyte 为什么 | 更新日期: 2023-09-27 18:12:08

我的理解是,没有ToString重载需要一个字节,它被显式转换为short。但是这些前导1是从哪里来的呢?

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

谢谢,改变航道

为什么转换.ToString((sbyte)- 128,2) preend 1's

你的理解完全正确。

1s是由一种叫做"符号扩展"的东西引起的。这是二进制补码运算的副作用

你实际上是在调用Convert的重载。ToString定义为:

Convert.ToString(short value, int base)

带符号的字节使用第一个位作为符号-您首先隐式地将其转换为short,由于二进制存储方式保持前置1以保持负数。(例如,sbyte形式的10000000在二进制中是-128)。