2016-10-19 4 views
-1

私はこのコードが何であるか分かりません。私はいくつかの説明を必要とします誰かがこのコードの機能を説明できますか?

出力が-128です。記号を「less」に変更すると48が出力されます。なぜですか?

+2

コードには未定義の動作があります。 –

+0

'char'のサイズについて考えると、符号ビットについて考えてください。 –

+0

「なぜ?」という質問に確実に答えられることは不可能です。理論的には、[ハードドライブのフォーマット](https://randomascii.wordpress.com/2014/05/19/undefined-behavior-can-format-your-drive/)になる可能性があります。 –

答えて

4

http://www.asciitable.com/

文字'0'は、あなたの価値がそう-128にオーバーフローに起こるsigned charに0以下になるまで48

あなたはこれをカウントアップの数値を持っています。編集:(これは未定義の動作ですが、一般的な結果ですが、これは毎回発生するという意味ではありません。つまり、DO NOT DO ITを意味します)

0未満で評価すると、カウントアップしないc。

kerrekが指摘したように、署名付き変数にオーバーフローが発生するため、未定義の動作が発生します。

+0

ああ、それについて考えて、ありがとう、これは多くの問題を解決することができます – TheNemesis584

+0

答えはそれを述べていますが、私は再び非常に明確になるようにしましょう:この行動には絶対にしないでください。 – davmac

+0

@davmacこれを編集します^^ –

関連する問題