javaSE 位运算练习题

位运算规则 :

有符号右位移左边补符号位,正数补0 ,负数补1

无符号右移左边补0

按位与      &        有0 则0

按位或     |       有1则1

按位异或  ^     不同则1      相同则 0

:右移一位除以2,左移一位乘以2

1、不用临时变量交换两个整数  

        int n=2;//0010
        int m=3;//0011
        // 不同为1,相同为0    n==n^m^m
        n=n^m;                                              //0001  =  0010^0011      int 1
        m=n^m;                                              //0010  =  0001^0011      int 2
        n=n^m;                                              //0011  =  0010^0001      int 3
        
        System.out.println(m+" "+n);

2、判断奇偶数  

		int n=4,m=5;
		if((n&1)==0) {
			System.out.println("偶数");
		}
		if((m&1)==1) {
			System.out.println("奇数");
		}

3、利用左移运算符计算 m 的第 n个二进制位是什么

		int m=3;//0011   0001
		int n=1;
		
		System.out.println((m&(1<>n-1);//可以
		System.out.println(m>>n-1&1);//对的

4、统计整数num的二进制表示中的1的个数,利用的是num & (num - 1)会将num的二进制表示的最后一位的1变成0

做法一:

		int count = 0;
		int number = 14;//1110 
	    while(number > 1){
	        number = number & (number - 1);//将number的二进制表示的最后一位的1变成0
	        count++;
	    }
	    System.out.println(count);

做法二:

	    int num = 11;//0000 1011    ~num 0000 0101    
        int coun = 0;
        while(num > 0){
        	num -= num & (~num + 1);  //   0000 0001
            coun++;
        }
	    System.out.println(coun);

 

5、判断一个数是不是2的幂。

		int num = 18;
		num = 16;
		if(( num&num - 1) == 0) {
			System.out.println("是");
		}else {
			System.out.println("否");
		}

6、判断是不是4的幂

		int n=32;
		if((n & n - 1) == 0){
	        if((n & 0x55555555)==0){
	        	System.out.println("是");
	        }else{
	        	System.out.println("否");
	        }
	    }

7、不使用+,-,*,/完成整数相加

		int n = 12;//0000 1100
		int m = 5; //0000 0101
		
		int sum = 0; 
		while( m != 0) {
			sum = n ^ m;//0000 1001        循环求不同
			m = ( n & m ) << 1;//0000 1000   满2进1
			n = sum;
		}
		System.out.println(n);

 

你可能感兴趣的:(位运算)