Найти b-й бит для числа n в его 64-битном представлении со знаком - PullRequest
0 голосов
/ 11 ноября 2018

Пусть n целое число и 0 <= b <= 63, b натуральное число.Найдите b-й бит для числа n в его 64-битном представлении со знаком. </p>

и T - количество тестовых случаев.

Это моя попытка:

#include <iostream>
#define f cin
#define g cout
using namespace std;

int T;
long long n;
int b;

int main()
{
    f >> T;
    for(int i = 1; i <= T; ++i)
    {
        f >> n >> b;
        int ans = 0;
        bool ok = true;
        while(n)
        {
            if(b == ans)
            {
                g << n % 2;
                ok = false;
                break;
            }
            n /= 2;
            ++ans;
        }
        if(ok) g << 0;
    }
    return 0;
}

но это работает не во всех тестовых случаях ... также есть ли другой способ сделать это?или есть другой способ хранить биты?есть ли специальные библиотеки?Вы можете сделать это более эффективно с другими инструментами?Можете ли вы дать мне немного информации о битовых масках?и где и когда вы должны их использовать и как они полезны?

1 Ответ

0 голосов
/ 11 ноября 2018

Компьютеры уже хранят целые числа в своем побитовом представлении. Все, что вам нужно, это побитовые операторы, чтобы узнать конкретный бит.

int bthbit(long long n, int b) {
    if (n & (1ULL << b)) return 1;
    return 0;
}

В решении используется побитовый оператор & после сдвига влево 1 на b бит. Вы можете прочитать о битовых операторах и битовых масках .

...