2013-04-08 62 views
0

該程序爲什麼顯示以下輸出?爲什麼std :: bitset <8>變量無法處理11111111?

#include <bitset> 
#include <cstdio> 
#include <iostream> 

int main() 
{ 
    std::bitset<8> b1(01100100); std::cout<<b1<<std::endl; 
    std::bitset<8> b2(11111111); std::cout<<b2<<std::endl; //see, this variable 
                  //has been assigned 
                  //the value 11111111 
                  //whereas, during 
                  //execution, it takes 
                  //the value 11000111. 
                  //Same is the case with b1 
    std::cout << "b1 & b2: " << (b1 & b2) << '\n'; 
    std::cout << "b1 | b2: " << (b1 | b2) << '\n'; 
    std::cout << "b1^b2: " << (b1^b2) << '\n'; 
getchar(); 
return 0; 
} 

這是輸出:

01000000 
11000111 
b1 & b2: 01000000 
b1 | b2: 11000111 
b1^b2: 10000111 

首先,我想有一些錯誤的頭文件(我是用MinGW的),所以我 使用MSVCC檢查。但它也顯示了同樣的事情。請幫忙!

回答

10

您使用號碼0110010011111111發起std::bitset。只需看看輸出:

01000000 
11000111 

兩者都是錯誤的。您正在啓動std::bitset,其二進制表示形式爲11111111,即101010011000101011000111。首先是數字01100100是在八進制表示:1001000000001000000在二進制。並且std::bitset佔用最少的八位。

這裏是正確的code

#include <bitset> 
#include <iostream> 
#include <string> 

int main() 
{ 
    std::bitset<8> b1(std::string("01100100")); std::cout<<b1<<std::endl; 
    std::bitset<8> b2(std::string("11111111")); std::cout<<b2<<std::endl; 
    std::cout << "b1 & b2: " << (b1 & b2) << '\n'; 
    std::cout << "b1 | b2: " << (b1 | b2) << '\n'; 
    std::cout << "b1^b2: " << (b1^b2) << '\n'; 
    return 0; 
} 

和正確的輸出:

01100100 
11111111 
b1 & b2: 01100100 
b1 | b2: 11111111 
b1^b2: 10011011 
+2

或者,如果他是熟悉的十六進制都:'的std :: bitset的<8> B1(0x64)'和'std :: bitset <8> b2(0xff)'應該工作。而從任何4個二進制位到十六進制值的轉換都是手動完成的。 – KChaloux 2013-04-08 13:03:49

相關問題