__int 64用法紹介

2429 ワード

今日の訓練で問題に遭遇しました.原題はPOJ 1426 Find The Multipleです.0と1からなる任意の数を探し出し、入力したnの倍数である.私の考えは2つあります.1つ目は、ビットを0または1にして、高位深さに検索します(2つの選択しかないので、0または1)、検索が終わるたびにstrがnで除去されるかどうかを判断します.ここではstringとlong longの変換に関連しています.しかし、最終的には100位を超えないという問題で、すぐに虚しくなった.さらに思いついたのはjavaのBigIntegerを利用しているのですが、あまり馴染みがない(また勉強します).いくつかの問題解を見て、ACコードは__に役に立ちます.int 64の、急いで勉強してください.
__int 64用法紹介
まず,よく用いられるint範囲は[−2^31,2^31],すなわち−2 147483648~2174483647であることを知る.一方、unsigned範囲は[0,2^32]、すなわち0~4294967295である.従って、従来の32ビット整数は40億以下の数しか処理できない.40億以上の数を処理するには,C++の64ビット拡張を用いる.一般的なACMコンテストでは、VC 6しか考えていません.0とg++コンパイラの拡張.VC6.0の64ビット整数をそれぞれ__と呼ぶint 64とunsigned_int 64、その範囲はそれぞれ[-2^63,2^63)と[0,2^64)、すなわち-922337203685475808~922337203685475807と0~18446744073709551615(約1800億)64ビット整数の演算は32ビット整数とほぼ同じであり、4つの演算とビット演算などがサポートされている.64ビットと32ビットの混合演算を行うと、32ビット整数は暗黙的に64ビット整数に変換される.ただし、VCの入出力と__int64の互換性はあまりよくない.
__int a;
cin >> a;
cout << a;

では、2行目に「error C 2679:binary'>」:no operator defined which takes a right-hand operand of type'_int 64'(or there is no acceptable conversion)」のエラー、3行目に「error C 2593:『operator<
scanf("%I64d", &a);
printf("%I64d", a);

これで正常に入出力できます.unsigned__int64を使用すると、I 64 d」を「I 64 u」に変更すればよい.OJは通常g++コンパイラを使用する.64ビット拡張方式はVCとは異なり、それぞれlong longとunsigned long longと呼ばれる.処理規模は入出力以外の使用方法と同様である.入出力についてはVCよりも拡張がよい.
long long a;
cin >> a;
cout << a;

使用することもできます
scanf("%lld", &a);
printf("%lld", a);

符号数がない場合は「%lld」を「%llu」に変更すればよい.最後に、特例として、Dev-C++のg++コンパイラを使用している場合は「%I 64 d」を使用し、「%lld」ではなく「%I 64 d」を使用している.本文の内容は以下のとおり転載される.http://www.cnblogs.com/wainiwann/archive/2012/04/23/2467203.html