蓝桥杯:位运算

一      位运算的功能

1,可进行判断奇偶数

     对于y=x&1,如果x为偶数,则x的二进制的最后一位是1,此时,y的值是1,如果x是奇数,则其二进制的最后一位是0,y的值是0;

2,获取二进制位是1还是0

java中有三种移位运算符

<<      :     左移运算符,num << 1,相当于num乘以2

>>      :     右移运算符,num >> 1,相当于num除以2

>>>    :     无符号右移,忽略符号位,空位都以0补齐

package com.lanqiao;
public class Binary {
    public static void main(String[] args)
    {
        int num = 19;
        String binaryString = Integer.toBinaryString(num);
        System.out.println(binaryString);
        for (int i = 0; i < binaryString.getBytes().length; i++)
        {
            System.out.print(get(num, i) + "\t");
        }
    }
    /**

     * @param num:要获取二进制值的数

     * @param index:倒数第一位为0,依次类推

     */

    public static int get(int num, int index)
    {
        return (num & (0x1 << index)) >> index;
    }

}

3.变换两个整数变量的值

4,不用判断语句,求整数的绝对值

对于异或运算:数值之间的异或运算就是二进制之间的运算

 

异或运算实例

 

实例2:

求二进制中1的个数

源码为

package com.lanqiao;

import java.util.Scanner;

/**
 * 求二进制中1的个数
 */
public class Binary2 {
    public static  void main(String args[])
    {
        Scanner scanner=new Scanner(System.in);
        int n=scanner.nextInt();
        System.out.println(Integer.toString(n,2));
//方法一:将000001中的1不断向左移位并与n相&,思想是每移动一位,就可以确定n的该位是不是1,
        int count=0;
        //比对每一位
        for(int i=0;i<32;i++)
        {
            if((n&(1<<i))==(1<<i))
            {
                count++;
            }
        }
        System.out.println(count);
        //方法二:让n本身向右移位,从0位开始移动,再与1相&,如结果为1,则说明最后一位是1。
        count=0;
        for(int i=0;i<32;i++)
        {
            if(((n>>>i)&1)==1)
            {
                count++;
            }
        }
        System.out.println(count);
//方法三:二进制数每减一,再和该二进制相&,结果就会使原二进制数少一个低位的1,直到去掉所有的1,记下去的次数、
        //就是二进制数中1的个数
        count=0;
        while (n!=0)
        {
            n=(n-1)&n;
            count++;
        }
        System.out.println(count);
    }

}

扩展:

如果询问:如何用一条语句判断一个数是不是2的整数次方?

思路:如果二进制位上只有一个1,则这个数就是二的整数次方

解法是利用上个问题的第三种解法

if((n&(n-1)==0)

 

 

 

 

posted @ 2019-02-07 21:35  ch_musk  阅读(125)  评论(0编辑  收藏  举报