位运算入门及简单算法题的应用

简介: 位运算入门及简单算法题的应用

概述

从现代计算机中所有的数据二进制的形式存储在设备中。即 0、1 两种状态,计算机对二进制数据进行的运算(+、-、*、/)都是叫位运算,即将符号位共同参与运算的运算。

将人类自然语言转化为机器语言来参与运算

位运算通常比其他运算更高效,原因如下:

  1. 硬件支持:现代计算机中的处理器通常会针对位运算提供专门的硬件支持,使得位运算可以在硬件层面上被高效执行。
  2. 简单操作:位运算是对二进制位进行简单的逻辑操作,相比其他运算(如乘法、除法)而言,位运算的操作逻辑更为简单,因此执行速度通常更快。
  3. 逻辑清晰:位运算的逻辑清晰,不涉及复杂的算术计算,因此在一些情况下,使用位运算可以使代码更易于理解和维护。
  4. 优化算法:在一些算法和数据结构中,位运算可以用来实现高效的算法,例如位图、哈希算法等,这些算法在性能上通常比其他实现更高效。
  5. 内存占用:位运算可以在一些情况下减少内存占用,例如使用位掩码来表示多个布尔值,可以节省内存空间。

总的来说,位运算在处理位级别的数据时通常更高效,但在某些情况下,它可能不够直观,需要权衡使用场景和代码可读性。

运算符

学习资料

位运算(&、|、^、~、>>、 | 菜鸟教程

基本用途

判断奇偶

只要根据最未位是0还是1来决定,为0就是偶数,为1就是奇数。

因此可以用if ((a & 1) == 0)代替if (a % 2 == 0)来判断a是不是偶数。

乘与除

可以有效防止二进制补码占据符号位后参与运算

每左移<<一位,相当于该数乘以2。

操作数每右移>>一位,相当于该数除以2。

算法题入门

package Dduo;
import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
      //判断一个数是2的幂次方
        Scanner sc=new Scanner(System.in);
        
        int n=sc.nextInt();
        
        //与运算 二进制补码都为1 才为1 否则为0
        System.out.print((n>0)&&((n&(n-1))==0));
        
    }
}

特征 初等数论 同余问题

package Dduo;
import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
      //判断一个数是4的幂次方
        Scanner sc=new Scanner(System.in);
        
        int n=sc.nextInt();
        
        System.out.print(  (n>0) && (  ((n&(n-1))==0) && (n%3==1) )  );
    }
}

如果一个数是偶数 在 -1

那么他二进制补码 最左边的1 右边的所有数都要变

然而这个不是目的

这时我们再进行与运算

运算一次 消去了一个0

package Dduo;
import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
      //判断一个十进制数转化为二进制后设置位的个数
        Scanner sc=new Scanner(System.in);
        
        int n=sc.nextInt();
        
        int cnt =0;
        while(n>0) {
         n &=(n-1);
         cnt++;
        }
       
        System.out.print(cnt);
    }
}
目录
相关文章
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
机器学习算法入门:从K-means到神经网络
【6月更文挑战第26天】机器学习入门:从K-means到神经网络。文章涵盖了K-means聚类、逻辑回归、决策树和神经网络的基础原理及应用场景。K-means用于数据分组,逻辑回归适用于二分类,决策树通过特征划分做决策,神经网络则在复杂任务如图像和语言处理中大显身手。是初学者的算法导览。
|
5天前
|
自然语言处理 算法
ransformers从入门到精通:常用的subword tokenizer算法
- WordPiece、BPE/BBPE最小字词进行合并最终字词,BPE/BBPE直接采用词频判断合并规则而WordPiece采用最大似然的方式 - unigram采用从最大的字词集合里移除那些对语料库整体概率贡献最小的子词【6月更文挑战第7天】
16 3
|
1天前
|
存储 算法 安全
MD5哈希算法:原理、应用与安全性深入解析
MD5哈希算法:原理、应用与安全性深入解析
|
1天前
|
算法 安全 Java
AES加解密算法:原理、应用与安全性解析
AES加解密算法:原理、应用与安全性解析
|
3天前
|
算法 程序员 数据处理
【数据结构与算法】使用单链表实现队列:原理、步骤与应用
【数据结构与算法】使用单链表实现队列:原理、步骤与应用
|
3天前
|
存储 算法 编译器
【数据结构与算法】使用数组实现栈:原理、步骤与应用
【数据结构与算法】使用数组实现栈:原理、步骤与应用
|
3天前
|
存储 算法
【数据结构和算法】---二叉树(2)--堆的实现和应用
【数据结构和算法】---二叉树(2)--堆的实现和应用
6 0
|
4天前
|
算法 Java
Java数据结构与算法:位运算之位移操作
Java数据结构与算法:位运算之位移操作
|
4天前
|
算法 Java
Java数据结构与算法:位运算之与、或、异或运算
Java数据结构与算法:位运算之与、或、异或运算
|
4天前
|
算法
算法入门——二分查找
算法入门——二分查找
8 0