通过位运算判奇偶(两种)

335 阅读1分钟

个人记录。

第一种:与十六进制相与

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是差不多的。