2016-05-13 2 views
-4

Почему эта функция: выходC++ функция соиЬ печати неправильное значение

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; 
} 

Print:


  1. : Размер: 00010000 20
  2. : 0000000000000000000000000000000010110000110000011111001011111001
+4

Почему бы и нет? Что вы ожидали, чтобы он печатался, и что вы в него входите? –

+0

вы можете увидеть там http://ideone.com/zkqMPO – AgentIvan

+0

int size = sizeof (a1); cout << endl << "size:" < (size) .to_string() << "" << size; размер = размер * 4; cout << "" << "size:" < (size) .to_string() << "" << size; Печать: размер: 00001000 8 размер: 00100000 20 – AgentIvan

ответ

0

пункт 1

Если вопрос, почему ваша программа печатает 20 в результате того, что, как представляется, sizeof(uint64_t) * 4 вместо 32, так это потому, что несколько строк перед вызовом rot_xor есть:

cout << hex 

в самом деле, точный выход, как можно видеть в ссылке вы помещены

size:00100000 20 

или 32 в двоичном и шестнадцатеричном представлении.

пункт 2

Я понятия не имею, что ожидаемая Ouput должна быть.

Смежные вопросы