zoukankan      html  css  js  c++  java
  • 蓝桥杯:位运算

    一      位运算的功能

    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) + "	");
            }
        }
        /**
    
         * @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)

  • 相关阅读:
    Typecho
    iOS开发
    搭建自己的Git服务器
    Markdown
    微信使用篇
    bzoj2406 矩阵
    POI2010 Bridges
    上下界网络流总结
    TopCoder SRM 582 Div 1
    port命令记录
  • 原文地址:https://www.cnblogs.com/chmusk/p/11078929.html
Copyright © 2011-2022 走看看