让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);
}
但是它不适用于所有测试用例...还有另一种方法吗?或者还有另一种方式来存储位?有一些特殊的图书馆吗?您可以使用其他工具更有效地做到这一点吗?您能给我一些有关位掩码的信息吗?以及何时何地应该使用它们以及它们如何有用?
答案 0 :(得分:1)
计算机已经按位表示形式存储了整数。您只需要按位运算符就可以知道特定的位。
int bthbit(long long n, int b) {
if (n & (1ULL << b)) return 1;
return 0;
}
该解决方案在将&
左移1
位后,使用按位b
运算符。您可能想阅读有关bitwise operators和bitmasks的信息。