2015-10-20 5 views
6

Ich versuche, XOR 128 Bit-Bitsets zu extrahieren.XOR 128-Bit-Bitsets

#include<iostream> 
#include<bitset> 

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

Der Ausgang ich erhalte, ist enter image description here

Die ersten 64 Bits 0 sind und die letzten 64 Bits sind XOR. Ich habe auch einen Compiler

warning: integer constant is too large for its type 

Gibt es eine Möglichkeit etwas XOR 128 Warnung Bitsets oder brauche ich eine hässliche Hack zu schaffen?

+2

Kein native C++ Typ auf dem heutigen normalen Maschinen ist in der Lage zu halten, ein 128-Bit-Wert. Sie könnten zwei 'std :: bitset <64>'s speichern und sie zusammenketten. – Downvoter

+0

Gibt es etwas in BOOST C++ @cad –

+0

@PranavKapoor Keine Ahnung von Boost, aber es ist wahrscheinlich ein Compiler eingebaut verfügbar. – Downvoter

Antwort

12

Ihr Problem ist nicht das XOR, sondern initialisiert die Bitsets von einer Konstante. Wie die Warnung sagt, gibt es eine Grenze für die Größe, die Integer-Konstanten haben können, und std::bitset Konstruktor nimmt eine unsigned long long, die in der Regel 64 Bit lang ist.

Sie können die Bitsets aus einem binären String initialisieren statt:

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

Oder kombinieren Sie es aus zwei 64-Bit-Bitsets:

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