私の理解は、sbyteを受け取り、明示的にshort型にキャストされているToStringオーバーロードがないことです。しかし、これらの主要な1はどこから来ていますか?なぜConvert.ToString((sbyte)-128、2)が1を前に付けるのですか?
Console.WriteLine("{0}", Convert.ToString((sbyte)-128, 2));
>1111111110000000
おかげで、 ジャイブ
私の理解は、sbyteを受け取り、明示的にshort型にキャストされているToStringオーバーロードがないことです。しかし、これらの主要な1はどこから来ていますか?なぜConvert.ToString((sbyte)-128、2)が1を前に付けるのですか?
Console.WriteLine("{0}", Convert.ToString((sbyte)-128, 2));
>1111111110000000
おかげで、 ジャイブ
あなたの理解は完全に右です。
1は「sign extension」というものが原因です。これは、バイナリ算術演算が2s complementの方法の副作用です。
としてあなたが実際に定義されたConvert.ToStringのオーバーロードを呼び出している:Aはバイトは記号として最初のビットを使用して署名した
Convert.ToString(short value, int base)
- あなたが最初の暗黙的理由バイナリ方法のどのショートに変換されていますネガティブを維持するために1をプリペンドする。 (つまり、sbyte形式の10000000はバイナリで-128です)。
申し訳ありません - 今日は少し遅いです:あなたはすでに質問のすべての情報を言いました! –
あなたは何か異なることが期待される理由を説明できますか?あなたはどんな結果を期待しましたか? –
私が期待していたのは単純に1000 0000でしたが、sblomの説明は完全に意味があります。私は、今後さらに詳細を追加していきます。 – Gybe
sbyte -128を短く変換したところ-32768になると予想されましたが、これは奇妙なことです。私が期待しているのは、あなたが得たもの、すなわち-128が短く保存されていることです。 –