2016-05-13 1 views
-4

Pourquoi cette fonction:C de la fonction Cout impression mauvaise valeur

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

sortie d'impression:


  1. : Taille: 00010000 20
  2. : 0000000000000000000000000000000010110000110000011111001011111001
+4

Pourquoi pas? Qu'est-ce que vous attendiez qu'il imprime et que lui transmettez-vous? –

+0

vous pouvez voir là http://ideone.com/zkqMPO – AgentIvan

+0

int size = sizeof (a1); cout << endl << "taille:" < (size) .to_string() << "" << taille; taille = taille * 4; cout << "" << "taille:" < (size) .to_string() << "" << taille; Imprimer: taille: 00001000 8 taille: 00100000 20 – AgentIvan

Répondre

0

Point 1

Si la question est pourquoi votre programme imprime 20 en raison de ce qui semble être sizeof(uint64_t) * 4 au lieu de 32, eh bien c'est parce que quelques lignes avant d'appeler rot_xor il y a un:

cout << hex 

en fait, la sortie exacte comme on peut le voir dans le lien que vous avez envoyé

size:00100000 20 

ou 32 en représentation binaire et hexadécimal.

point 2

Je ne sais pas ce que devrait être votre ouput prévu.