我的理解是,沒有ToString重載需要一個sbyte,並且它被顯式地強制轉換爲short。但是這些領先的1從哪裏來?爲什麼Convert.ToString((sbyte)-128,2)預先加1?
Console.WriteLine("{0}", Convert.ToString((sbyte)-128, 2));
>1111111110000000
感謝, 的Jibe
我的理解是,沒有ToString重載需要一個sbyte,並且它被顯式地強制轉換爲short。但是這些領先的1從哪裏來?爲什麼Convert.ToString((sbyte)-128,2)預先加1?
Console.WriteLine("{0}", Convert.ToString((sbyte)-128, 2));
>1111111110000000
感謝, 的Jibe
你的理解是完全正確。
1是由一個叫做「sign extension」的東西造成的。這是一個2s complement二進制算法工作的副作用。
你實際上是調用Convert.ToString的定義爲過載:
Convert.ToString(short value, int base)
有符號字節使用第一位爲標誌 - 你是第一個它隱含轉換爲短的這是因爲,二進制的方式存儲保持1預先保持消極。 (即,萬字節形式的10000000是二進制的-128)。
對不起 - 今天有點慢:意識到你已經提到了問題中的所有信息! –
你能解釋爲什麼你期望有不同的東西嗎?你期望的結果是什麼? –
我所期望的只是1000 0000,但sblom的解釋非常有道理。我一定會在未來增加更多細節。 – Gybe
您將sbyte -128轉換爲short,您期望得到-32768,這看起來像是一件奇怪的事情。我期望的是你得到的,即-128儲存在一個短的。 –