在带有符号的64位表示形式上找到数字n的第b位

时间:2018-11-11 18:02:10

标签: c++ bitmap bit-manipulation 64-bit bit

  

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

T是测试用例的数量。

这是我的尝试:

if (conditions.Any())
{
    var parameter = Parameter(typeof(History));
    var body = conditions
        .Select(condition => Expression.Constant(condition))
        .Select(condition => Expression.AndAlso(
        Expression.Equal(
            Expression.PropertyOrField(parameter, nameof(History.IdReference)),
            Expression.Convert(
                  Expression.PropertyOrField(condition, nameof(Condition.IdReference))
                , Expression.PropertyOrField(parameter, nameof(History.IdReference)).Type)
        ),
        Expression.Equal(
            Expression.PropertyOrField(parameter, nameof(History.TableName)),
            Expression.Convert(
                  Expression.PropertyOrField(condition, nameof(Condition.TableName))
                , Expression.PropertyOrField(parameter, nameof(History.TableName)).Type)
         )
        ))
        .Aggregate(Expression.OrElse);                      
    var predicate = Lambda<Func<History, bool>>(body, parameter);
    histories = histories.Where(predicate);
}

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

1 个答案:

答案 0 :(得分:1)

计算机已经按位表示形式存储了整数。您只需要按位运算符就可以知道特定的位。

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

该解决方案在将&左移1位后,使用按位b运算符。您可能想阅读有关bitwise operatorsbitmasks的信息。