だれかC言語詳しい人教えて、どういうことなの
longが64ビット、intが32ビットの環境で
int64_t i = -9223372036854775808L;
ってコンパイルすると、GCCもClangも「整数値の絶対値が大きすぎて符号なしになっちゃうよ」って言うんだけど、なぜ??
上の数値はINT64_MINを直接書いたただけで、int64_t (long) の値として正しいはずだし、同MINと==で比較してもtrueになるのも確認済み。なのになぜ??
これなのでINT64_C(-92...)も常に警告が出ちゃう。
それで警告メッセージからの予想だと、-92...Lが(-92...)Lじゃなくて-((92...)L)って解釈されてる気がして、かつそれが規格上正しいのでどうしようもならない、という気がする。でも正確なとこを知りたい。
re: だれかC言語詳しい人教えて、どういうことなの
@tadd CじゃなくてC++だけど、やはり-(92...L)って解釈になるので、-9223372036854775807L - 1Lって書く必要があるらしい(一番下のExample)。 https://en.cppreference.com/w/cpp/language/integer_literal.html
- replies
- 1
- announces
- 0
- likes
- 1
@ruto うわーやっぱりだった!情報ありがとー。