2015-10-20 21 views
6

XOR yedek 128 bit bitsets çalışıyorum.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; 
} 

alıyorum çıktı ilk 64 bit 0 ve son 64 bit XOR olan enter image description here

olduğunu. Ben de

warning: integer constant is too large for its type 

128 bitlik bit kümeleri XOR veya çirkin bir hack oluşturmak için gereken yapmak için bir yol var mı uyaran bir derleyici olsun?

+2

bugünün Normal makinelerde Hiçbir yerel C++ tipi tutma kapasitesine sahiptir 128 bitlik bir değer. İki tane std :: bitset <64> 'saklayabilir ve bunları birlikte zincirleyebilirsiniz. – Downvoter

+0

BOOST C++ @cad –

+0

@ PranavKapoor'da bir şey var mıdır? Boost hakkında bir fikir yok ama muhtemelen bir derleyici mevcut. – Downvoter

cevap

12

Sorununuz XOR değil, bitsetleri bir sabitden başlatılıyor. Uyarı olarak, tamsayı sabitlerinin sahip olabileceği boyut sınırlaması vardır ve std::bitset yapıcı genellikle 64 bit uzunluğunda olan bir unsigned long long alır.

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

Ya da iki 64-bit bit kümeleri gelen birleştirin:

yerine bir ikili dizesinden bit kümeleri başlatabilir

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