2015-10-20 16 views
6

私はXORを128ビットのビットセットにしようとしています。XOR 128ビットのビットセット

#include<iostream> 
#include<bitset> 

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

Iを得る出力は最初の64ビットが0であり、最後の64ビットがXORである enter image description here

あります。私はまた、

warning: integer constant is too large for its type 

警告コンパイラは、128ビットのビットセットをXORするか、私は醜いハックを作成する必要がありますいくつかの方法があり得ますか?

+2

今日の通常のマシンではネイティブC++のタイプは保持することが可能ではありません128ビットの値。 2つの 'std :: bitset <64>'を格納し、それらを連鎖させることができます。 – Downvoter

+0

BOOSTで利用できるものはありますか?@cad –

+0

@PranavKapoor Boostは考えられませんが、おそらくコンパイラが組み込まれています。 – Downvoter

答えて

12

問題はXORではなく、定数からビットセットを初期化することです。警告によると、整数定数が持つことができるサイズには限界があり、std::bitsetコンストラクタは通常、長さが64ビットのunsigned long longです。

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

するか、2つの64ビットのビットセットからそれを組み合わせる:

代わりにバイナリ文字列からビットセットを初期化することができます

std::bitset<128> value = (std::bitset<128>(0x123456789) << 64) | 
         std::bitset<128>(0x123456789); 
関連する問題