2015-10-20 16 views
6

Sto provando a XOR per gestire bitet a 128 bit.XOR bitset a 128 bit

#include<iostream> 
#include<bitset> 

int main() 
{ 
    std::bitset<128> testing; 
    testing = std::bitset<128>(0x544F4E20776E69546F656E772020656F)^
    std::bitset<128>(0x5473206768204B20616D754674796E75); 
    std::cout<<testing; 
} 

L'uscita ottengo è enter image description here

I primi 64 bit sono 0 e gli ultimi 64 bit sono XOR. Ho anche un compilatore avvertimento

warning: integer constant is too large for its type 

C'è qualche modo per XOR 128 bitsets bit o ho bisogno di creare un brutto hack?

+2

No nativo C Tipo ++ su normali macchine di oggi è in grado di contenere un valore a 128 bit. È possibile memorizzare due '' std :: bitset <64> 's e incatenarli insieme. – Downvoter

+0

C'è qualcosa disponibile in BOOST C++ @cad –

+0

@PranavKapoor Nessuna idea di Boost ma probabilmente è disponibile un compilatore integrato. – Downvoter

risposta

12

Il tuo problema non è lo XOR, ma l'inizializzazione dei bitset da una costante. Come dice l'avvertimento, c'è un limite alla dimensione che le costanti intere possono avere, e il costruttore prende uno unsigned long long che di solito è lungo 64 bit.

È possibile inizializzare i bitset da una stringa binaria, invece:

std::bitset<128>("100101010....") 

o combinare da due bitset a 64 bit:

std::bitset<128> value = (std::bitset<128>(0x123456789) << 64) | 
         std::bitset<128>(0x123456789);