[解決済み] このプログラムはどのように機能するのですか?
2023-04-27 06:42:52
質問
#include <stdio.h>
int main() {
float a = 1234.5f;
printf("%d\n", a);
return 0;
}
を表示します。
0
!! どうしてそんなことが可能なのでしょうか?その理由は何ですか?
私は意図的に
%d
の中に
printf
文の挙動を調べるために
printf
.
どのように解決するのですか?
それは
%d
は
int
を期待しますが、あなたはfloatを提供しました。
使用する
%e
/
%f
/
%g
でfloatを表示します。
0が表示される理由について。浮動小数点数は次のように変換されます。
double
に送る前に
printf
. リトルエンディアンの二重表現で1234.5という数値は
00 00 00 00 00 4A 93 40
A
%d
は32ビット整数を消費するので、0が出力されます。(テストとして
printf("%d, %d\n", 1234.5f);
を出力することができます。
0, 1083394560
.)
なぜ
float
が変換され
double
であるため、printf のプロトタイプは
int printf(const char*, ...)
であるため、6.5.2.2/7より。
関数プロトタイプの宣言子で省略記法を使用すると、最後に宣言されたパラメータの後で引数の型変換が停止します。 デフォルトの引数昇格は、末尾の引数に対して行われます。
と6.5.2.2/6からあります。
呼び出される関数を表す式がプロトタイプを含まない型を持つ場合、各引数に対して整数の昇格が行われる。 を持つ引数、および型が
float
に昇格される。double
. これらは デフォルト引数のプロモーション .
(これを発見してくれたAlokに感謝します。)
関連
-
[解決済み] C++とCの融合 - #ifdef __cplusplus はどのように機能するのか?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] C言語で配列のサイズを決定するにはどうすればよいですか?
-
[解決済み】C言語の関数ポインタはどのように機能するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】coutはstdのメンバではない
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】'cout'は型名ではない
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】C++の余分な資格エラー
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み】浮動小数点数の乱数生成