我有像
这样的代码A = B|C|D|E;
抛出警告“在|”
的操作数中围绕算术建议括号期望表达式需要操作符的高优先级paranthesis,尝试以下方法:
A=(B|C)|(D|E);
另外一个:
A=(((B|C)|D)|E);
仍然存在相同的警告。
请帮我解决这个问题。
谢谢, 萨贾塔
B,C,D是枚举,E是整数。
答案 0 :(得分:12)
你的表达式中有一些算术运算符,实际上并不是简单的B,或者说它不是简单的C等。编译器建议你将任何表达式括起来,以便读者看到你写的是你的意思。如果你没有括号,每个人都必须准确记住优先级是什么,并且他们必须弄清楚你是否记得你写的时候。
试试这个:(B)|(C)|(D)|(E)。
答案 1 :(得分:2)
这是一个奇怪的警告。当您使用不同的运算符并且这些运算符具有不同的优先级时,您只需要注意优先级。例如,算术乘法的优先级高于加法。
但在这种情况下,您只使用一次运算符多次。按位或者是关联的和可交换的((A | B) | C == A | (B | C)
和A | B == B | A
)因此没有理由发出警告。