课时21:位运算

简介: 位运算是对二进制数据进行直接计算处理,包括与(&)、或(|)、异或(^)、反码(~)和移位操作。理解位运算需掌握十进制与二进制的转换逻辑,如数字13转为二进制为00001101。范例展示了13和7的位运算结果:&运算得5,|运算得15。移位操作如2左移2位得8。位运算曾用于提升计算性能,但现代内存容量大,其重要性有所下降。面试题中,&和|既可用于位运算也可用于逻辑运算;&&和||则用于短路逻辑判断,前者遇false停止,后者遇true停止。

课时21:位运算


位运算指的是可以直接进行二进制数据的计算处理,主要有:与(&)、或(|)、异或(^)、反码(~)、移位处理。

如果要想理解位操作,则一定要清楚十进制与二进制之间的转换处理逻辑:数字除2取余。比如:数字13求二进制,过程如下:

image.png

image.png


范例:观察与操作,如果两位都是1结果才是1,有一位是0结果就是0。

public class JavaDemo {
public static void main(string args[]) {
int x=13;
int y=7;
system.out.println(x & y);
}
}

计算结果:5

image.png

13的二进制:00000000 00000000 00000000 00001101

7的二进制: 00000000 00000000 00000000 00000111

&计算:      00000000 00000000 00000000 00000101 → 5

范例:观察或运算,有一位是1结果就是1,两位都是0的时候结果才是0。

public class JavaDemo {
public static void main(string args[]) {
int x=13;
int y=7;
system.out.println(x | y);
}
}

计算结果:15

image.png

13的二进制:00000000 00000000 00000000 00001101

7的二进制: 00000000 00000000 00000000 00000111

|运算:      00000000 00000000 00000000 00001111 → 15

在进行位运算处理的时候还可以进行移位的计算。例如:以2的3次方计算为例。


范例:移位处理

public class JavaDemo {
public static void main(string args[]) {
int x=2;
system.out.println(x <<2);
system.out.println(x);
}
}

计算结果:2

image.png

2的二进制:00000000 00000000 00000000 00000010;

向左移2位:00000000 00000000 00000000 00001000;→8

最初,提升计算性能可以通过位操作实现,许多程序已经为你准备好了位操作库。还有一些操作可以通过更简单的方式完成,而且现在的内存容量也更大。即使你写的程序再差,性能也不会差到哪里去,因为现在的内存不再是按 K (千字节)销售,而是按 G (吉字节)甚至 T (太字节)销售了。

面试题:请解释&和&&、|和||的区别?

1&和|两个运算符可以进行位运算与逻辑运算;

|-在进行逻辑运算的时候所有的判断条件都要执行;

|-在进行位运算的时候只是针对于当前的数据进行&和|处理;

2在逻辑运算上还可以使用&&、||;

|-&&:在若干个条件判断的时候,如果前面的条件返回了false,后续所有的条件都不再判断,最终的结果就是false;

|-||:在若干个条件判断的时候,如果前面的条件返回了true,后续条件不再执行,最终就是true。

相关文章
Object转Map的两种方式
在平时的工作中,有时候需要将Object转换成Map。笔者这里总结了两种将Object转成Map的方式方法。
7599 0
|
Linux 虚拟化 监控
PERF EVENT 硬件篇
简介 本文将通过以 X86 为例子介绍硬件 PMU 如何为 linux kernel perf_event 子系统提供硬件性能采集功能 理解硬件 MSR (Model Specify Register) 可以理解为CPU硬件的专用寄存器,下述的所有寄存器都是这个类型 汇编指令 rdmsr/wrm.
4179 0
|
算法 Unix Linux
C语言随机数的产生(rand、srand、time函数细节讲解)
C语言随机数的产生(rand、srand、time函数细节讲解)
295 0
|
Ubuntu Linux Windows
linux 挂载硬盘报错 "mount: unknown filesystem type 'ntfs'"
【10月更文挑战第7天】在Linux系统中挂载硬盘时遇到“mount: unknown filesystem type &#39;ntfs&#39;”错误,是因为Linux默认可能不支持NTFS文件系统。本文提供了解决方案:安装NTFS-3G软件包以支持NTFS,并检查内核是否已加载NTFS模块。对于Ubuntu/Debian系统,可使用`sudo apt-get install ntfs-3g`命令;对于CentOS/RHEL系统,则需先安装EPEL仓库再安装NTFS-3G。此外,还需确认硬盘设备名正确无误,并创建合适的挂载点目录。
2655 2
|
安全 Java API
第7章 Spring Security 的 REST API 与微服务安全(2024 最新版)(下)
第7章 Spring Security 的 REST API 与微服务安全(2024 最新版)
320 0
|
机器学习/深度学习 人工智能 自然语言处理
【AI大模型】ChatGPT模型原理介绍(上)
【AI大模型】ChatGPT模型原理介绍(上)
|
存储 C语言 C++
来不及哀悼了,接下来上场的是C语言内存函数memcpy,memmove,memset,memcmp
本文详细介绍了C语言中的四个内存操作函数:memcpy用于无重叠复制,memmove处理重叠内存,memset用于填充特定值,memcmp用于内存区域比较。通过实例展示了它们的用法和注意事项。
255 0
|
存储 安全 Java
缓冲区溢出之堆溢出(Heap Overflow)
【8月更文挑战第18天】
677 3
|
存储 固态存储 Linux
在Linux中,ext4文件系统有何特性?如何检查文件系统的完整性?
在Linux中,ext4文件系统有何特性?如何检查文件系统的完整性?
|
机器学习/深度学习 算法 索引
m基于Qlearning强化学习的小车倒立摆控制系统matlab仿真
在MATLAB 2022a中模拟的Q-learning倒立摆控制显示出稳定平衡效果。Q-learning算法通过智能体与环境交互学习最佳控制策略,以维持摆杆直立。算法基于状态s和动作a更新Q值表,目标是最大化未来奖励。系统状态包括小车位置、速度、杆角度及角速度。动作是小车加速度。当状态或动作空间大时,用神经网络近似Q函数,DQN通过经验回放和目标网络稳定学习。核心代码涉及状态更新、贪婪策略选择动作及环境反馈,实时更新摆杆和小车位置。
334 6