2015-10-20 83 views
6

我想異或拖動128位的位集。異或128位位集

#include<iostream> 
#include<bitset> 

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

我得到的輸出是 enter image description here

第64位是0,最後64位是異或運算。我也得到一個編譯器警告

warning: integer constant is too large for its type 

是否有某種方法來異或128位的位集或我需要創建一個醜陋的黑客?

+2

今天的正常機器沒有本地C++類是能夠保持一個128位的值。您可以存儲兩個'std :: bitset <64>'並將它們鏈接在一起。 – Downvoter

+0

BOOST C++ @cad –

+0

@PranavKapoor有沒有可用的Boost,但可能有內置的編譯器可用。 – Downvoter

回答

12

你的問題不是異或,而是從常量初始化位集。正如警告所說,整數常量的大小有一個限制,並且std::bitset構造函數採用unsigned long long這通常是64位長。

您可以從一個二進制字符串初始化位集來代替:

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

或者由兩個64位位集結合起來:

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