基础算法:位运算

简介: 基础算法:位运算

在我们进行位运算的基础算法之前,先对任意一个二进制数n的第n位表示如下:

一:给一个数n,判断二进制表示第X位是0还是1

 以如下为例:

//判断3的二进制第1位是0还是1
        int n=3;
        System.out.println((n>>1)&1);

运行结果:

二:给定一个数n(二进制数),将X位的修改成1

//要将3的二进制第2位变成1
        int n=3;//0 0 0 0 0 0 0 1 1
        System.out.println(Integer.toBinaryString(n));
        n=(1<<2)|n;
        System.out.println(Integer.toBinaryString(n));

运行结果:

三:给定一个二进制数n,将n的第X位修改成0

int n=3;//0 0 0 0 0 0 0 1 1
        System.out.println(Integer.toBinaryString(n));
        n=(~(1<<1))&n;
        System.out.println(Integer.toBinaryString(n));

运行结果:

四:提取一个数n,将最右侧1提取出来

int n=3;//0 0 0 0 0 0 0 1 1
        System.out.println(Integer.toBinaryString(n));
        n=n&(-n);
        System.out.println(Integer.toBinaryString(n));

运行结果:

五:干掉最右侧的1,即将最右侧的1变成0

int n=3;//0 0 0 0 0 0 0 1 1
        System.out.println(Integer.toBinaryString(n));
        n=n&(n-1);
        System.out.println(Integer.toBinaryString(n));

运行结果:

六:相关位运算力扣练习题

a:191题位1的个数  力扣191

public int hammingWeight(int n) {
        int count=0;
        while(n!=0){
            n=n&(n-1);
            count=count+1;
        }
        return count;
    }
//利用n=n&(n-1)将每次n的最右边的1去掉,即将1变成0,当n为0的时候,就可以终止循环

b:338题比特位计数 力扣338

public int[] countBits(int n) {
        int []array=new int[n];
        for(int i=0;i<=n;i++){
            int temp=i;
            int count=0;
            while(temp!=0){
                temp=temp&(temp-1);
                count++;
            }
            array[i]=count;
        }
      return array;
    }

c:461题汉明距离  力扣461

//先进行异或,将x和y的1放在一个变量中,依据相同为0,不同为1的原则
        //假设:x=1  -----> 00001
        //    y=4  -----> 00100
        //  x^y    -----> 00101
        //此时利用x^y&(x^y-1)可以快速计算出两者之间的距离
       int temp=x^y;
       int count=0;
       while(temp!=0){
           temp=temp&(temp-1);
           count++;
       }
       return count;
相关文章
|
6月前
|
算法
算法思想总结:位运算
算法思想总结:位运算
|
6月前
|
机器学习/深度学习 存储 算法
【算法基础】常数操作 时间复杂度 选择排序 冒泡排序 插入排序 位运算
【算法基础】常数操作 时间复杂度 选择排序 冒泡排序 插入排序 位运算
|
3月前
|
算法
【算法】位运算算法——消失的两个数字(困难)
【算法】位运算算法——消失的两个数字(困难)
|
3月前
|
算法
【算法】位运算算法——只出现一次的数字Ⅱ
【算法】位运算算法——只出现一次的数字Ⅱ
|
3月前
|
算法
【算法】位运算算法——判断字符是否唯一
【算法】位运算算法——判断字符是否唯一
|
3月前
|
算法
【算法】位运算算法——两整数之和
【算法】位运算算法——两整数之和
|
3月前
|
算法
【算法】位运算算法——丢失的数字
【算法】位运算算法——丢失的数字
|
3月前
|
算法
算法】位运算——常见位运算基础操作总结
算法】位运算——常见位运算基础操作总结
算法】位运算——常见位运算基础操作总结
|
5月前
|
存储 自然语言处理 算法
位运算入门及简单算法题的应用
位运算入门及简单算法题的应用
45 1
|
5月前
|
算法 Java
Java数据结构与算法:位运算之位移操作
Java数据结构与算法:位运算之位移操作