2

そのため、ビット単位の文字列を使用していくつかの作業を行ってきましたが、旅行中にこの long long をバイナリ形式で表示する必要がありました。最初の cout に示すように、変数には正しい値があります。ただし、バイナリで表示すると「1」が欠落します。これを引き起こしているアイデアはありますか?

#include <iostream>
#include <bitset>

using namespace std;

int main(){
    long long truncator=4294967551ll;
    cout<<truncator<<"\n";
    std::bitset<64> b(truncator);
    cout<<b;
    return 0;
}

出力は次のとおりです。 4294967551 0000000000000000000000111111111

4

3 に答える 3

1

long long文字列に変換する独自の関数を作成します。

string convertToBitString(long long value)
{
    string str(64, '0');

    for(int i = 0; i < 64; i++)
    {
        if( (1ll << i) & value)
            str[63-i] = '1';
    }

    return str;
 }
于 2013-07-29T19:18:00.190 に答える
-1

bitset が 64 ビット パラメーターを処理する方法は、コンパイラによって異なります。一部の Visual Studio バージョンは long long を受け入れますが、他のコンパイラは 64 ビットの long long が使用可能であっても 32 ビットの long のみを受け入れます。ただし、バイナリ表現を出力することは難しくありません。シンプルで、頭のてっぺんから、テストされていません..

string str;
do
{
    str += ((truncator&1)?'1':'0');
} while (--truncator);
reverse(str.begin(), str.end());
于 2013-07-29T19:19:33.180 に答える