次のコードの場合:
#include <stdio.h>
int main(){
printf("%f", 5);
printf("%d", 5.01);
}
最初のステートメントは0.000000を出力し、2番目のステートメントは多数を出力します。
printfは、%fの形式でスタックから4バイトの引数をポップすることを確認したと思います。次に、printf関数がfloatをdoubleに変換する、つまり8バイトの引数になるという参照をいくつか調べました。だから私はそれが予測できない値を出力するかもしれないと思った。しかし、どうすれば0.000000を印刷できますか。
2つ目も堕落しています。5.01のバイナリ形式は01000000101000000101000111101100(0x40A051EC)である必要があり、10進数形式では1084248556である必要がありますが、ステートメントの結果は1889785610です。これが発生するのはなぜですか。