`
yuxuan1215
  • 浏览: 14053 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

 
阅读更多
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解惑的学习笔记》想了解的可以参照)

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics