2011-10-20 4 views
3

私の理解は、sbyteを受け取り、明示的にshort型にキャストされているToStringオーバーロードがないことです。しかし、これらの主要な1はどこから来ていますか?なぜConvert.ToString((sbyte)-128、2)が1を前に付けるのですか?

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

>1111111110000000 

おかげで、 ジャイブ

+0

あなたは何か異なることが期待される理由を説明できますか?あなたはどんな結果を期待しましたか? –

+0

私が期待していたのは単純に1000 0000でしたが、sblomの説明は完全に意味があります。私は、今後さらに詳細を追加していきます。 – Gybe

+2

sbyte -128を短く変換したところ-32768になると予想されましたが、これは奇妙なことです。私が期待しているのは、あなたが得たもの、すなわち-128が短く保存されていることです。 –

答えて

6

あなたの理解は完全に右です。

1は「sign extension」というものが原因です。これは、バイナリ算術演算が2s complementの方法の副作用です。

0

としてあなたが実際に定義されたConvert.ToStringのオーバーロードを呼び出している:Aはバイトは記号として最初のビットを使用して署名した

Convert.ToString(short value, int base) 

- あなたが最初の暗黙的理由バイナリ方法のどのショートに変換されていますネガティブを維持するために1をプリペンドする。 (つまり、sbyte形式の10000000はバイナリで-128です)。

+0

申し訳ありません - 今日は少し遅いです:あなたはすでに質問のすべての情報を言いました! –

関連する問題