2017-05-17 15 views
0

この非常に単純なプログラムを考えてみましょう。目的は最後の2ビット(0,1,2 ou 3を表示)、次の2ビットなどを印刷することです。モジュラス演算子がuint_fast64_tで動作しない

#include <iostream> 
using namespace std; 

    inline void test(uint_fast64_t k) { 
     for (int i=0; i<32; i++) { 
      cout << k%4 << endl; 
      k>>2; 
     } 
    } 
int main() { 
    test(77968641563295808); 
    return 0; 
} 

出力は、不条理な0(および唯一の0)のリストです。それを説明できるものは何ですか?不思議なことに、小さな数字でうまくいくようです。また、問題が書式にないことを喜んで、私は手動でk%4の連続した結果を常に0と比較して常に真実になります。

答えて

2

問題は、kがループ内で更新されないということです。 k>>2は、kの値を更新しません。この問題を修正すると、期待される結果が得られます。

+0

私はそれについて完全に忘れていました。私はk >> = 2を使用していたはずです。 – user2370139

関連する問題