p.tatapa.org

p.tatapa.org

だれか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 うわーやっぱりだった!情報ありがとー。