java奇偶数

下面这个方法,想确定他是否是奇数,能正常的运行么?

public static boolean isOdd(int i){

    return i % 2 == 1;    

}

        虽然奇数是被定义为被2整除余数为1的整数、表达式i %2 计算的是i整除2时所产生的余数,看起来是能够正常运转的,但是他不能,因为他有四分之一的时间返回值是错误的。

        为什么是四分之一呢?因为所有的int值中有一半是负数,而此方法对所有的负奇数计算都是错误的,当int为负整数时,结果返回都是false。

        这是java对(%)操作符的定义所产生的结果,该表达式的定义规则:

(a/b)*b+(a%b) == a //所有的int数a与所有非0的int数b

 尝试带入就会发现,当整数为-1时,结果也是-1,isOdd方法错误的返回了false。其实这个问题也很容易修正,只要把i% 2与0而不是与1比较,并且反转即可:

public static boolean isOdd(){

    return i % 2 != 0;

}

但是在计算速度上,使用以下表达式会更好,因为位运算受cpu支持。

public static boolean isOdd(int i){

    return (i&1)!=0;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值