2017-10-30 11 views
0

cを2進法(0111111001)に、次に16進法(f9)に変換しました。それではなぜfffffff9の結果が返ってくるのですか?このコードの出力はなぜfffffff9ですか?

+2

あなたの8ビット 'char'は**署名**されていて、コンソールに出力される前に32ビット**署名**' int'に**符号拡張**されています。その初期値は1に設定された高位ビットを持っているので、余分なビットもあります –

+0

intへのキャストは符号拡張です。 – Steve

+1

'char'は署名されていても署名されていなくてもかまいません。 '0371'は' signed char'に収まらないでしょう。 https://stackoverflow.com/questions/2054939/is-char-signed-or-unsigned-by-default –

答えて

4

システム上のcharタイプが署名されている場合、値0xf9は負の数です(具体的には-7です)。その結果、整数に変換すると整数に数値-7が得られます。これは16進表現0xFFFFFFF9(符号付き32ビット整数表現を使用している場合)です。

明示的に文字の値をunsigned charにすると、C++はそれを正の値249(16進表現0x000000F9の等価整数値249)と同じようにキャストします。

+0

ああ、ありがとうございます。 – Lucy

関連する問題