0

このプログラムが次の出力を表示するのはなぜですか?

#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を使用して確認しました。しかし、それも同じことを示しました。助けてください!

4

1 に答える 1

10

数字とで開始しstd::bitsetます。出力を確認するだけです。 0110010011111111

01000000
11000111

どちらも間違っています。バイナリ表現std::bitsetの 10 進数11111111で開始しています。101010011000101011000111そして最初に、数値01100100は 8 進表現、つまり 2 進表現です1001000000001000000。そしてstd::bitset、その最下位 8 ビットを取得します。

正しいコードは次のとおりです。

#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
于 2013-04-08T10:26:37.500 に答える