位运算实例——判断奇偶性

文章目录

  • 判断奇偶性
    • 常规方法
    • 位运算方法
      • 说明
  • 例子,判断连续奇数

判断奇偶性

转自——判断奇偶性

同样一个问题,位运算可以提高程序的运行效率。

下面讲一下关于奇偶性的判断。

常规方法

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

位运算方法

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

说明

我们知道计算机中的数字通常用二进制补码表示。

如果为正数,补码与原码相同,直接看最后一位(因为数字1的前面N位均为0,跟它做与运算,前面肯定为0),奇数为1,偶数为0,与1相与,结果不变。

如果为负数,补码转原码:保持符号位不动,其它各位取反+1,即为负数的绝对值原码全部取反+1。还是只看最后1位,先取反,再+1,结果还是和原来相同。进行与运算时还是原来的末位,所以用跟1做与运算还是保持原来的结果。

例子,判断连续奇数

存在连续三个奇数的数组

public class Solution {
	
    public boolean threeConsecutiveOdds(int[] arr) {
    	if(arr.length<3) {return false;}
    	int[] array = new int[arr.length];
    	for (int i = 0; i < arr.length; i++) {
    		array[i] = isOdd(arr[i]);
		}
    	//System.out.println(Arrays.toString(array));
    	for (int i = 2; i < array.length; i++) {
			if((array[i-2] & array[i-1] & array[i])==1) {
				return true;
			}
		}
		return false;
    }
    
    private int isOdd(int i) {
    	return (i&1)!=0?1:0;
    }
    
    public static void main(String[] args) {
//    	int[] arr = {1,2,34,3,4,5,7,23,12};
    	int[] arr = {2,6,4,1};
		System.out.println(new Solution().threeConsecutiveOdds(arr));
	}
    
}

你可能感兴趣的:(acm,零基础学数据结构)