2016-01-11 4 views
12

私の抜粋:MSVCが-2147483648のタイプとしてlong longを選択するのはなぜですか?

auto i = -2147483648; 
int j = 3; 
std::swap(i, j); // Compile error about mismatched types here. 

コンパイラはリテラルilong longであると述べています。何故ですか? -2147483648はMSVC x64のintに適合します。

コンパイラはMSVCで、ターゲットは64ビットです。

+1

[浮動小数点型の最小32ビット整数(-2147483648)は正の数(2147483648.0)を与えます](http://stackoverflow.com/q/11536389/995714)、[なぜ0 <-0x80000000?]ですか( http://stackoverflow.com/q/34182672/995714)、[(-2147483648> 0)はC++でtrueを返しますか?](http://stackoverflow.com/q/14695118/995714) –

+1

楽しみのために、コンパイラの 'INT_MIN'の定義です。 'INT'が32ビットであっても、正確にはINT_MINは(-2147483648)として定義されていません。 – MSalters

+1

私は最後の質問の複製を閉じることを躊躇しています。歓迎の意見。 – MSalters

答えて

29

一般的な考え方とは逆に、-2147483648はではありません。リテラルは負のリテラル値をサポートしていません。

それは、実際には、リテラル 32ビットint sおよびlong Sを有するMSVC x64の上2147483648

、2147483648の単項否定なるコンパイル時に評価可能な定数式それらのいずれかには大きすぎますので、あなたが観察するタイプのlong longにフェイルオーバーします。

+0

@ P45私たちはCタグ30で同じ質問をしました分前に、重複して閉じました。 – SergeyA

+0

@ P45私が話している質問です:http://stackoverflow.com/questions/34724320/printf-d-or-i-minimum-int-value/34724513?noredirect=1#comment57195717_34724513 – SergeyA

+0

私はその1つだけアップアップしました。ところで、私は学校にいません。私はバテシバと働いています。しかし、それは長いものに変換するようです。 –

関連する問題