数据结构(Java)--位运算

前言

本文为本小白学习数据结构的笔记,将以算法题为导向,向大家更清晰的介绍数据结构相关知识(算法题都出自B站马士兵教育------左老师的课程,讲的很好,对于想入门刷题的人很有帮助)

为什么要使用为位运算

位运算 直接对整数的二进制位进行操作,因为在计算机中数据都是以二进制存储的,因此它在许多场景下能够提供比传统算术和逻辑运算更高效、更简洁的解决方案。

常见的几种位运算

1.位与&

复制代码
十进制转二进制 两个都为1则为1,否则为0

例:判断奇偶数:x&1=1(x为奇数 ) x&1=0(x为偶数)

2.位或|

复制代码
十进制转二进制 两个都为0则为0,否则为1

3.异或^

复制代码
十进制转二进制 两个数都相同为0,否则为1

(满足交换律,相同的数异或位0,任何数和0异或都等于这个数本身)

4.按位取反~

复制代码
变为二进制后,0变1,1变0,高位不足取0

5.左移 x<<y

复制代码
变为二进制后,x左移y位,补零。相当于乘二。

6.右移 x>>y

复制代码
变为二进制后,x右移y位,x为非负数高位补零,为负数高位补1。

例:(x+y)>>1右移一位相当于除以二

下面列几个比较好玩的运算的例子

1. 实现a与b值的交换
java 复制代码
//实现a与b值的交换

    a = a ^ b;
    b = a ^ b;    //  b=a^b^b=a
    a = a ^ b;    //  a=a^b^b
2. 想查x第n位是否为1:x&(1<<n)
3.把x的第n位设置为1/0;

为1

为0

4.取出x最右位的1

eor=eor & (~eor + 1)

5.在一个int arr\[\] 数组中,一种数出现了奇数次,其余树出现偶数次

(1)找到出现奇数次的数

(2)如果两种数出现奇数次,其他偶数次,怎样找到这两种数

要求时间复杂度O(n),空间O(1)

java 复制代码
//第一问
//所有数全部异或运算得出
public static void Num1(int[] arr){
    int eor = 0;
    for (int cur : arr) {
        eorr ^= cur;
    }
    System.out.println(eor);
}
java 复制代码
//第二问
//假设两个出现奇数次的数为a和b,将所有数全部异或得出eor=a^b
public static void Num2(int[] arr){
    int eor = 0;
    for (int cur : arr) {
        eorr ^= cur;
    }
    //eor 必有一位上是1
    int rightOne = eor & (~eor + 1);//取出最右位的1
    
    int onlyOne = 0;
    for(int aur : arr){
       if((aur & rightOne) == 0) {
           onlyOne ^= aur;
       }
    }
    System.out.println(onlyOne + " " +(eor^onlyOne));
}
相关推荐
caimouse26 分钟前
reactos编码规范
c语言·开发语言
xieliyu.4 小时前
Java算法精讲:双指针(三)
java·开发语言·算法
明夜之约5 小时前
Spring Boot 自动装配源码
java·spring boot·后端
Leaton Lee5 小时前
Spring Boot分层架构详解:从Controller到Service再到Mapper的完整流程
java·spring boot·后端·架构
Jinkxs5 小时前
Resilience4j- 与 Spring Boot 快速集成:自动配置与基础注解使用
java·spring boot·后端
辣机小司5 小时前
【踩坑记录:Spring Boot 配置文件读取值不一致?警惕 YAML 的“八进制陷阱”与 SnakeYAML 版本之谜】
java·spring boot·后端·yaml·踩坑记录
CryptoPP5 小时前
快速对接东京证券交易所API数据:实战指南与代码示例
开发语言·人工智能·windows·python·信息可视化·区块链
ZC跨境爬虫6 小时前
跟着 MDN 学JavaScript day_7:数学运算与逻辑判断实战测试
开发语言·前端·javascript·学习·ecmascript
fangdengfu1236 小时前
ES分析系统各个服务日志占用量
java·前端·elasticsearch
云烟成雨TD6 小时前
Spring AI 1.x 系列【51】可观测性技术选型
java·人工智能·spring