N0.1 奇数性

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右边始终填充0
00110010 >> 200001100结果一样
00110010 >>> 200001100
10110010 >> 211101100结果不同
10110010 >>> 200101100

 

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

运算规则如下表所示。

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值