我在C ++中只有一个关于按位AND的简单问题。 我将它用于单个位(a& 8,a& 4,a& 2,a& 1等),我希望得到bool值作为回报(如果有' s 1位置)。
我可以将它除以一个数字(如(a& 8)/ 8),但它在我的代码中看起来真的很好看(特别是,我使用数组和变量的长名称) )。
还有其他更好的方法来编码吗?
提前致谢。
答案 0 :(得分:2)
如果你想要明确,请与0比较:
const bool maskSet = (a & 8) != 0;
这是我所知道的最干净的方式。除法是非常奇怪的,因为它仍然保留从整数到布尔隐式的转换。比较运算符使其明确。
答案 1 :(得分:2)
最好的方法是将表达式转换为布尔值。这提高了可读性:
bool result;
result = 0 != (a & 8);
与0的比较可能是不必要的,因为编译的代码将在变量true
中写入false
或b
。但这避免了像:
warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)
如果你不喜欢Yoda演讲,那么顺序或比较论点可能会被颠倒过来。这种风格可以帮助避免C编程语言中的意外分配。