用Java编写一个快速幂算法时遇到了位运算符&无法用if语句判断的情况,找了一圈没找到有我所遇到问题的解答,那就让我自己解答自己的问题吧。
问题情况是这样子的:
错误信息:The operator & is undefined for the argument type(s) long, boolean
也就是说long型变量不能和boolean型变量做&运算得到的结果不是boolean不能用if语句判断。
为什么是错误信息是说long型和boolean型做运算,我们明明希望的是m&1后的结果于1比较。原因在于==运算符的优先等级比&运算符高,这两个运算符连用,表达式会优先计算1==1返回结果是boolean型的true,然后再于m进行&运算。所以要解决问题只要加一个括号就行了。如下图所示:
或者将if里面的表达式换成m%2==1,效果是一样的,因为%运算符的优先级比==高。
注:位运算符不能作用于float和double等浮点型数。