按位AND with if语句 我可以使用C++中的按位和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; } }
简短回答:否按位AND with if语句 我可以使用C++中的按位和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; } },c++,C++,简短回答:否 通常,对任何非基元类型的对象使用逐位操作被认为是一个坏主意(我看不出这到底能实现什么)。此外,我很少看到在非自然数的情况下,按位运算被证明是有用的。==的优先级高于&您应该使用parens: a & notMyType == notMyType 被评估为 a & (notMyType == notMyType) 因此,您应该使用: (a & notMyType) == notMyType 实际上,您正在使用按位AND运算符(&),但您可能希望使用逻辑A
通常,对任何非基元类型的对象使用逐位操作被认为是一个坏主意(我看不出这到底能实现什么)。此外,我很少看到在非自然数的情况下,按位运算被证明是有用的。
==
的优先级高于&
您应该使用parens:
a & notMyType == notMyType
被评估为
a & (notMyType == notMyType)
因此,您应该使用:
(a & notMyType) == notMyType
实际上,您正在使用按位AND运算符(
&
),但您可能希望使用逻辑AND运算符(&&
)。是的,可能需要一些假设和修复
假设:
是一个整数类型MyType
- 这些常量通常是位值(1、2、4,…)或其语义上的自然组合
a & flag == flag
真的意味着
a & (flag == flag)
也就是说,假设这都是积分,而不是外部过载
a & 1
也就是说
(a & 1) == 1
这不是你想要的。要么加括号,要么简单地写
a & flag
依赖于当且仅当
a
具有标志flag
时,这将强制转换为true
。此条件看起来不像布尔值,但是C++提供了一个隐式转换到布尔值。零值转换为false
,任何其他值转换为true
您究竟想实现什么?为了可读性,您应该使用if((a&b)==b)
而不是if(a&b==b)
@ThiefMaster:这两个结构并不意味着相同的事情。第二个被解析为(a&(b==b))
。顺便问一下,“myType”是什么类型的?它是整数类型定义吗?如果涉及的值是整数,典型的习惯用法是不进行比较:If(a¬MyType)
你怎么知道myType
不是一个原语的typedef
,或者是一个定义了运算符&
的类型?我指出,如果myType是一个自然数,那么它可能会很有用。很抱歉对它进行了错误编辑。我还有一个问题-如果我不使用相等运算符,代码如何区分notMyType、newMyType和oldMyType?谢谢。编辑的答案涵盖了这一点。我建议您在问题中添加您类型的声明,以及您可以提供的任何其他子问题或澄清,如果您希望重新打开它。