我可以使用bitwise&在C ++代码中如下所示。该方法根据按位运算的结果返回一个布尔值。
bool SetValue( myType a )
{
if( a & notMyType == notMyType )
{
return false;
}
if( a & newMyType == newMyType )
{
SendNew(a);
return true;
}
if( a & oldMyType == oldMyType )
{
SendOld(a);
return true;
}
}
答案 0 :(得分:5)
==
的优先级高于&
,您应该使用parens:
a & notMyType == notMyType
评估为
a & (notMyType == notMyType)
所以你应该使用:
(a & notMyType) == notMyType
实际上你使用的是按位AND运算符(&
),但你可能想要使用逻辑AND运算符(&&
)。
答案 1 :(得分:3)
简答:否。
通常,对任何不是原始类型的东西使用按位运算被认为是一个坏主意(我不知道无论如何都会完成)。此外,我很少看到按位运算证明对非自然数的东西有用的情况。
答案 2 :(得分:2)
是的,可能会有一些假设和修正。
假设:
MyType
是一个整数类型您的上一次比较看起来像一个拼写错误(您选择使用一个标志,并与另一个标志进行比较)。这仍然适用于某些价值组合,但最多会让人感到非常困惑。
您还需要修复运算符优先级。
a & flag == flag
真的意味着
a & (flag == flag)
这意味着,假设这是完整的而不是异常过载,
a & 1
表示
(a & 1) == 1
这不是你想要的。添加括号或只写
a & flag
当且仅当true
有标记a
时,才会依赖此flag
。此条件看起来不像布尔值,但C ++提供了对Boolean的隐式转换。零值转换为false
,任何其他值转换为true
。