Rokiのチラ裏

学生による学習のログ

データ型の範囲

int main()
{
    using ullint=unsigned long long int;
    using ulint=unsigned long int;
    
    std::cout<<ullint(ULLONG_MAX)<<std::endl;
    std::cout<<ulint(ULLONG_MAX)<<std::endl;
}

ulintはオーバーフローを起こすはずである。…と思われるセマンティックスだが

ideone:Ideone.com - LguZAm - Online C++0x Compiler & Debugging Tool
Wandbox:[Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ

当然の事なのだが32bitと64bitの環境によって、このように動作が異なる。 Code iqで10億を越える値を扱う問題を解いていて、異なる動作をしたのが経緯であるが、環境に依存する移植性のないコードを無意識に書かないようにしなければなと思った。