N0.1 奇数性

来源:互联网 发布:组策略部署软件 编辑:程序博客网 时间:2024/04/28 17:00

Java谜题1:表达式谜题

N0.1 奇数性


public static boolean isOdd(int i){         return i % 2 ==1;}
这个方法有错误,因为取余(%)操作返回一个非零的结果时,它与左操作数具有相同的正负符号。
在任何负数上调用该方法都会返回false,不论奇偶。


改正方法:将 i % 2 与1比较该为与零比较。

public static boolean isOdd(int i){         return i % 2 !=0;}

如果正在一个性能临界(performance-critical)环境中使用isOdd方法,那么用位操作符逻辑与AND(&)来替代取余操作符会显得更好:

public static boolean isOdd(int i){         return (i & 1) !=0;}

Java 位操作符

无符号右移位操作符“>>>”在将bit串右移位时,从bit串的最左边填充0,这和带符号右移位操作符“>>”不同。

“>>”在将bit串右移位时,从bit串的最左边填充原来最左边的位。

也就是说,bit串原来最左边的位是符号位,如果为1,则在带符号右移时最左边始终填充1;如果为0,则在带符号右移时最左边始终填充0。
移位操作符的例子见下表。

操作结果说明00110010 << 211001000右边始终填充000110010 >> 200001100结果一样00110010 >>> 20000110010110010 >> 211101100结果不同10110010 >>> 200101100

 

“按位与”操作符“&”对两个bit串按位进行逻辑与,“按位或”操作符“|”对两个bit串按位进行逻辑或,“按位异或”操作符“^”对两个bit串按位进行异或操作。

运算规则如下表所示。

 

按位与按位或按位异或0 & 0 = 00 | 0 = 00 ^ 0 = 00 & 1 = 00 | 1 = 10 ^ 1 = 11 & 0 = 01 | 0 = 11 ^ 0 = 11 & 1 = 11 | 1 = 11 ^ 1 = 0