你不知道的:整数的奇偶性判断

 1奇偶性

     奇数可以被定义成被2整除余1的整数。于是想到用语言实现用求模取余即可:i%2==1,但是这样会不会有什么问题呢?看下面的例子:

public class IsOdd {
    public static boolean isOdd(int i){
        return i%2 == 1;
     }
   
    public static void main(String[] args){
       System.out.println(isOdd(5));
       System.out.println(isOdd(-5));
    }
}

         我们知道5和-5都是奇数,上面的结果会不会都是真呢,运行一下发现isOdd(5)的结果是true而isOdd(-5)的结果为false.大家想想也能明白-5%2的结果是-1,所以当一个整数是负数时永远不会得到正确的结论。 

2正确判断整数的奇偶性

      那么怎样判断整数的奇偶性才是正确的呢?先了解java中取余(%)操作符的定义,该操作符被定义为对于所有的int数值和所有非零的int数值b 都满足下面的恒等式:

                                (a/b)*b+a%b =a

       这也是我们小学学习的商乘以除数加余数等与被除数,但是当与java的截尾整数整除操作符结合时,它就意味着,当取余操作返回一个非零的结果时,它与左操作符具有相同的正负号,即i为负整数事i%2返回的是-1而不是1。

       到这里就可以对上面的奇偶判断函数进行改进了,代码如下:

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

       如果在性能临界的环境中使用用位操作符AND(&)将会更好。

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

       因此无论何时使用%操作符是应考虑操作数和结果的符号。(本文是本人学习《java解惑的学习笔记》想了解的可以参照)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值