位运算符

摘要:位运算符技巧和解题思路

一、找重复出现的数 (变体是找出落单数)

描述:一个数组中只有一个数出现了2次,求这个数是什么?

解法1: 使用异或运算
A^0 = A ; A^A = 0;
我们只需要把要消掉的数变成双个进行异或运算
解法2: 桶排序

	public static void main(String[] args) {
		int N =11 ;
		//初始化数组
		int [] arr = new int[N];
		for (int i = 0 ; i < arr.length-1 ; i++ ){
		    arr[i] = i+1;
		} 
		//产生随机数
	    arr[arr.length-1] = new Random().nextInt(N-1)+1;
	    System.out.println("随机重复数:"+arr[arr.length-1]);
	    for (int i = 0 ; i < arr.length ;i++ ){
		    System.out.print(arr[i]+" ");
		}
	    int x = 0;
	    for (int i = 1 ; i < N ;i++ ){
	        x = x^i;
	     } 
            for (int j = 0 ; j<N ; j++){
		    x = x^arr[j];
	    } 
		 
		System.out.println("重复数为:"+x);
		
	}

二、找二进制1的个数

考察与运算
解法1. 1& 32位的二进制整数,计数 N&(1<<i) == (1<<I) ?此位为1可计数 : 不是继续循环
解法2. (N-1)&N ==0 ? 结束循环 : 计数

三、进制转换

求整数x 转成 K 进制的字符串
Integer.toString( x , k)

原文地址:https://www.cnblogs.com/Qvolcano-blog/p/14586421.html