C ++ cout函数打印错误的值

时间:2016-05-13 17:27:26

标签: c++ cout

为什么这个功能:

uint64_t rot_xor(uint64_t a1, uint64_t a2) {
    int size = sizeof(a1)*4;
    cout<<" "<<"size:"<<bitset<8>(size).to_string()<<" "<<size;
    int shift;
    uint64_t output = 0;
    cout<<endl;
    for (shift = 0; shift < size; shift++)
        if(a1&(1<<shift)) {
            output ^= (a2 << shift) | (a2 >> (size - shift));
            cout << bitset<64>(output).to_string()<<endl;
        }
return output;
}

打印输出:

  1. :size:00010000 20
  2. :0000000000000000000000000000000010110000110000011111001011111001

1 个答案:

答案 0 :(得分:0)

第1点

如果问题是为什么你的程序打印20因为似乎是sizeof(uint64_t) * 4而不是32,那么它是因为在调用rot_xor之前有一些行有一个:

cout << hex

事实上,您发布的链接中可以看到的确切输出是

size:00100000 20
二进制和十六进制表示的

或32。

第2点

我不知道您的预期输出应该是什么样的。