要想判断某个整数是否为奇数,首先我们要弄清楚“奇数”的概念。下面是数学中的定义:整数中,能被2整除
的数是“偶数”,反之是“奇数”,偶数可用2k表示 ,奇数可用2k+1表示,这里k是整数。
那么,根据这个定义我们很容易写出如下程序达到判断奇数的目的:
/**
* 判断某个整数是否为奇数
*
* @param i
* 要判断的整数
* @return
* 返回判断的结果
*/
public boolean isOdd( int i)
{
return (i % 2 ) != 0 ;
}
* 判断某个整数是否为奇数
*
* @param i
* 要判断的整数
* @return
* 返回判断的结果
*/
public boolean isOdd( int i)
{
return (i % 2 ) != 0 ;
}
这段代码虽然可以实现功能,但是“%”的效率不是最高的,那么有没有更好的方法呢?答案是肯定的,利位
操作符“&”,也就是“按位与”,下面是这个方法的代码:
/**
* 判断某个整数是否为奇数
*
* @param i
* 要判断的整数
* @return
* 返回判断的结果
*/
public boolean isOdd( int i)
{
return (i & 1 ) != 0 ;
}
* 判断某个整数是否为奇数
*
* @param i
* 要判断的整数
* @return
* 返回判断的结果
*/
public boolean isOdd( int i)
{
return (i & 1 ) != 0 ;
}
这个方法相信很多人都知道,但是大部分都是“知其然,不知其所以然”,那么到底为什么呢?我们要先弄清
楚“&”的用法。“&”就是按位与,也就是对两个数的二进制的每一位进行“与”的操作,可用下面的表格来
说明:
数值 | 二进制 |
11309 | 0010 1100 0010 1101 |
798 | 0000 0011 0001 1110 |
11309&798 | 0000 0000 0000 1100 |
明白了“&”的用法就好说了,大家请注意,所有的奇数都有一个特点,也就是二进制的最后一位必定是
“1”,相反,偶数最后一位必定是“0”。而“1”的二进制是“0001”,也就是除了最后一位是“1”,其余全
为“0”,那么无论什么数字和“1”进行“&”的运算,得到的数除了最后一位,其余也将全部为“0”,那么“奇
数&1”的结果则必然是1,“偶数&1”的结果则必然是0。