个人记录。
第一种:与十六进制相与
int x = 23;
int y = 30;
if((y & 0x1) ==1){
//判断是否为奇数 y和十六进制相与,并取其二进制中最右的一位
System.out.println("奇数");
}
节约了内存效率更快,因为二进制更加贴合底层运算。(个人理解)
第二种:与1相与
i&1==1 判断为奇数
i&1==0 判断为偶数
按位与运算,取 2进制整数 i 的最低位,如果最低位是1 则得1,如果最低位是0 则得0。 奇数 i 的最低位 是1,偶数i 的最低位 是0。
- 0 0000 0000 &1 得0
- 1 0000 0001 &1 得1
- 2 0000 0010 &1 得0
- 3 0000 0011 &1 得1
- 4 0000 0100 &1 得0
二进制中,偶数中 1 的个数一定和除以 2 之后的数字一样多。因为最低位是 0,除以 2 意味着右移一位,也就是把那个 0 抹掉,所以 1 的个数是不变的。
二进制中,奇数一定比前一位的偶数多一个 1,因为恰好多出的就是最低位的 1。
可参考力扣的338题。 leetcode.cn/problems/co…
第二种方法判断奇偶速度,没有显著的优化。跟%2==0是差不多的。