0

ビットが設定されているかどうかのみをチェックする以下のアルゴリズムを使用して、C++ で unsigned long long の設定ビットをチェックしようとしています。しかし、私の問題は、私が得た答えが間違っていることです。バイナリで格納されます。

コード:

#include<stdio.h>
#include<iostream>
#define CHECK_BIT(var,pos) ((var) & (1<<(pos)))
using namespace std;
int main()
{
    int pos=sizeof(unsigned long long)*8;
    unsigned long long a;
    cin>>a;
    pos=pos-1;
    while(pos>=0)
    {
        if(CHECK_BIT(a,pos))
          cout<<"1";
        else
          cout<<"0";
        --pos;
    }
}

入力:

1000000000000000000

出力:

1010011101100100000000000000000010100111011001000000000000000000

期待される出力:

110111100000101101101011001110100111011001000000000000000000

別の入力についても同様です。

14141

出力:

0000000000000000001101110011110100000000000000000011011100111101

期待される出力:

11011100111101

2 番目の例 (実際には任意の小さな数値) では、バイナリ パターンは 32 ビット後に繰り返されます。

4

1 に答える 1

2

あなたが持っているのはビットセットマクロの問題だと思います。それを置き換えてください

#define CHECK_BIT(var,pos) ((var) & (1LL<<(pos)))
于 2013-03-16T21:57:39.463 に答える