2015-10-20 20 views
6

Tôi đang cố gắng XOR kéo bit bit 128 bit.Các bit bit XOR 128

#include<iostream> 
#include<bitset> 

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

Kết quả tôi nhận được là enter image description here

Phiên bản 64 bit đầu tiên là 0 và 64 bit cuối cùng là XOR. Tôi cũng nhận được cảnh báo trình biên dịch

warning: integer constant is too large for its type 

Có cách nào để bit XOR 128 bit hoặc tôi có cần tạo một bản hack xấu xí không?

+2

Không C++ loại có nguồn gốc trên máy bình thường hiện nay là khả năng giữ giá trị 128 bit. Bạn có thể lưu trữ hai 'std :: bitset <64>' s và kết nối chúng lại với nhau. – Downvoter

+0

Có gì có sẵn trong BOOST C++ @cad –

+0

@PranavKapoor Không có ý tưởng nào về Boost nhưng có thể có sẵn một trình biên dịch có sẵn. – Downvoter

Trả lời

12

Vấn đề của bạn không phải là XOR, nhưng khởi tạo các bit từ một hằng số. Như cảnh báo nói, có một giới hạn cho kích thước mà hằng số nguyên có thể có, và std::bitset hàm tạo mất một số unsigned long long thường dài 64 bit.

Bạn có thể khởi tạo bitsets từ một chuỗi nhị phân thay vì:

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

Hoặc kết hợp nó từ hai bitsets 64-bit:

std::bitset<128> value = (std::bitset<128>(0x123456789) << 64) | 
         std::bitset<128>(0x123456789); 
Các vấn đề liên quan