[解決済み] 最小のint型である-2147483648はなぜ'long'型なのでしょうか?[重複しています]。
2022-04-24 01:08:27
質問
学校の課題で、C言語のprintf関数をコーディングしなければなりません。物事はかなりうまくいっているのですが、1つだけ良い答えが見つからない質問があるので、ここに書いておきます。
printf("PRINTF(d) \t: %d\n", -2147483648);
が教えてくれる(
gcc -Werror -Wextra -Wall
):
error: format specifies type 'int' but the argument has type 'long'
[-Werror,-Wformat]
printf("PRINTF(d) \t: %d\n", -2147483648);
~~ ^~~~~~~~~~~
%ld
しかし、int型変数を使用すると、すべてがうまくいくのです。
int i;
i = -2147483648;
printf("%d", i);
なぜ?
EDITです。
いろいろな点が理解でき、大変興味深かったです。とにかく、私は
printf
が使っているのは
<stdarg.h>
librairyなどです。
va_arg(va_list ap, type)
も正しい型を返すはずです。例えば
%d
と
%i
の場合、明らかに返される型は
int
. 何か変化があるのでしょうか?
解決方法は?
C言語では
-2147483648
は整数の定数ではありません。
2147483648
は整数定数であり
-
は単項演算子を適用しただけのもので、定数式が得られます。の値は
2147483648
には収まりません。
int
(一つ大きすぎる。
2147483647
は一般的に最大の整数である)、したがって、整数定数はタイプ
long
そのため、このような問題が発生します。の下限値について言及したい場合、その下限値は
int
を使用するか、マクロ
INT_MIN
から
<limits.h>
(ポータブルな方法)、または慎重に
2147483648
:
printf("PRINTF(d) \t: %d\n", -1 - 2147483647);
関連
-
[解決済み] MIPSのネストされたForループと配列の使用
-
[解決済み] char *とchar[]の違い [重複]
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] オブジェクトの種類を決定しますか?
-
[解決済み] 配列の場合、なぜ a[5] == 5[a] になるのでしょうか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] Pythonで型をチェックする標準的な方法は何ですか?
-
[解決済み] Cプリプロセッサはなぜ "linux "という単語を定数 "1 "と解釈するのですか?
-
[解決済み] 型(例:int? myVariable)の後にクエスチョンマークを付けるのは何のためですか?
-
[解決済み】type()とisinstance()の違いは何ですか?)
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
C 構造体定義エラー: '['トークンの前に一次式があることが予想される
-
g++が内部・外部コマンドソリューションとして認識されない、MinGWを初めて使うときの落とし穴
-
[C] レポートエラー 代入の左オペランドとしてlvalueが必要
-
C++の配列コピー
-
error: 'for' loop initial declaration is only allowed in C99 mode 原因と解決方法
-
関数 'malloc' の暗黙の宣言に対する解決策
-
[解決済み] C - Setデータ構造を実装するには?
-
[解決済み] Cコードの単体テスト【終了しました
-
[解決済み】0 < -0x80000000 はなぜ?
-
[解決済み】C++で(-2147483648> 0)がtrueを返す?