首页 > 解决方案 > 在它的 64 位表示中找到数字 n 的第 b 位,带符号

问题描述

设n为整数,0<=b<=63,b为自然数。在带有符号的 64 位表示中找到数字 n 的第 b 位。

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;
}

但它不适用于所有测试用例......还有另一种方法吗?还是有另一种存储位的方法?有一些特殊的图书馆吗?你能用其他工具更有效地做到这一点吗?你能给我一些关于位掩码的信息吗?以及您应该在何时何地使用它们以及它们有何用处?

标签: c++bitmapbit-manipulation64-bitbit

解决方案


计算机已经将整数存储在其按位表示中。您所需要的只是按位运算符来了解特定位。

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

&该解决方案在按位左移后使用按位运算1b。您可能想了解按位运算符和位掩码


推荐阅读