2011-10-20 62 views
3

我的理解是,沒有ToString重載需要一個sbyte,並且它被顯式地強制轉換爲short。但是這些領先的1從哪裏來?爲什麼Convert.ToString((sbyte)-128,2)預先加1?

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

>1111111110000000 

感謝, 的Jibe

+0

你能解釋爲什麼你期望有不同的東西嗎?你期望的結果是什麼? –

+0

我所期望的只是1000 0000,但sblom的解釋非常有道理。我一定會在未來增加更多細節。 – Gybe

+2

您將sbyte -128轉換爲short,您期望得到-32768,這看起來像是一件奇怪的事情。我期望的是你得到的,即-128儲存在一個短的。 –

回答

0

你實際上是調用Convert.ToString的定義爲過載:

Convert.ToString(short value, int base) 

有符號字節使用第一位爲標誌 - 你是第一個它隱含轉換爲短的這是因爲,二進制的方式存儲保持1預先保持消極。 (即,萬字節形式的10000000是二進制的-128)。

+0

對不起 - 今天有點慢:意識到你已經提到了問題中的所有信息! –