基础算法:位运算

简介: 基础算法:位运算

在我们进行位运算的基础算法之前,先对任意一个二进制数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;
相关文章
|
8月前
|
算法
算法思想总结:位运算
算法思想总结:位运算
|
8月前
|
机器学习/深度学习 存储 算法
【算法基础】常数操作 时间复杂度 选择排序 冒泡排序 插入排序 位运算
【算法基础】常数操作 时间复杂度 选择排序 冒泡排序 插入排序 位运算
|
2月前
|
算法 数据处理 C语言
C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合
本文深入解析了C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合,旨在帮助读者掌握这一高效的数据处理方法。
51 1
|
10天前
|
算法
【算法】位运算合集
/鸽巢原理优化//位图原理//bitMap&0001000只有非0或者0两个结果//说明当前bitMap位是0,那就添加进去}else{//1:把字符串转化为字符数组// //2:把字符扔到hash表中// //获取hash表中x的value值// }else{// }// }
|
5月前
|
算法
【算法】位运算算法——消失的两个数字(困难)
【算法】位运算算法——消失的两个数字(困难)
|
5月前
|
算法
【算法】位运算算法——只出现一次的数字Ⅱ
【算法】位运算算法——只出现一次的数字Ⅱ
|
5月前
|
算法
【算法】位运算算法——判断字符是否唯一
【算法】位运算算法——判断字符是否唯一
|
5月前
|
算法
【算法】位运算算法——两整数之和
【算法】位运算算法——两整数之和
|
5月前
|
算法
【算法】位运算算法——丢失的数字
【算法】位运算算法——丢失的数字
|
5月前
|
算法
算法】位运算——常见位运算基础操作总结
算法】位运算——常见位运算基础操作总结
104 0
算法】位运算——常见位运算基础操作总结

热门文章

最新文章