2017-05-17 5 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의 목록입니다. 그게 뭐라 설명 할 수 있니? 이상하게도, 그것은 작은 숫자로 잘 작동하는 것처럼 보입니다. 또한 문제가 형식화되지 않았 음을 염두에두고 필자는 k % 4의 연속 결과를 항상 0과 비교하여 항상 참이되게했습니다.

답변

2

문제는 k이 루프 내부에서 업데이트되지 않는다는 것입니다. k>>2k의 값을 업데이트하지 않습니다. 이 문제를 해결하면 예상되는 결과를 얻을 수 있습니다.

+0

완전히 잊어 버렸습니다. k >> = 2를 사용해야했습니다. – user2370139