模数运算符不使用uint_fast64_t

时间:2017-05-17 12:42:47

标签: c++ bit-manipulation

考虑这个非常简单的程序。目的是打印最后2位(显示0,1,2 ou 3),然后打印下两位,依此类推。

#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进行比较,结果总是如此。

1 个答案:

答案 0 :(得分:2)

问题是k未在循环内更新。 k>>2未更新k的值。如果您解决了这个问题,您将获得预期的结果。