当前位置: 首页 > news >正文

逻辑与位运算的双面舞者:、、|、||深度解析

深入解析&、&&、|、||:逻辑与位运算的奥秘之旅

在编程的世界里,&、&&、|、||这四种运算符扮演着至关重要的角色。它们不仅仅是简单的符号,更是连接程序逻辑、实现复杂功能的桥梁。本文旨在深入探讨这四者的区别与联系,通过生动的例子和详细的分析,带领读者走进逻辑与位运算的奥秘之旅。

一、引言:初探运算符的奥秘

在编程的浩瀚宇宙中,运算符如同星辰般璀璨,而&、&&、|、||则是其中最为耀眼的几颗。它们分别代表了位与运算、逻辑与运算、位或运算和逻辑或运算。理解它们的区别与联系,对于编写高效、可维护的代码至关重要。

二、逻辑运算符:&& 与 ||

2.1 逻辑与运算符(&&)

逻辑与运算符&&用于连接两个布尔表达式,当且仅当两边的表达式都为真(true)时,整个表达式的结果才为真。其最大的特点是“短路效应”:如果第一个表达式为假(false),则不会计算第二个表达式的值,因为整个表达式的结果已经确定为假。这种特性在条件判断中尤为重要,可以有效避免不必要的计算,提高程序的效率。

示例

if (A && B) {  // 只有当A和B都为真时,这里的代码才会执行  
}
2.2 逻辑或运算符(||)

与逻辑与运算符相反,逻辑或运算符||用于连接两个布尔表达式,只要两边的表达式中有一个为真,整个表达式的结果就为真。同样具有“短路效应”:如果第一个表达式为真,则不会计算第二个表达式的值,因为整个表达式的结果已经确定为真。

示例

if (A || B) {  // 只要A或B中有一个为真,这里的代码就会执行  
}

三、位运算符:& 与 |

3.1 位与运算符(&)

位与运算符&是一种按位操作的运算符,它会对参与运算的两个数的二进制位进行逐位比较。只有当两个相应的二进制位都为1时,结果位才为1,否则为0。与逻辑与运算符不同,位与运算符的两边可以是任何数值类型,而不仅仅是布尔类型。此外,它不具备“短路效应”,即使第一个操作数为0(二进制全为0),也会计算第二个操作数的值。

示例

int a = 3; // 二进制为 0011  
int b = 5; // 二进制为 0101  
int result = a & b; // 结果为 0001,即1
3.2 位或运算符(|)

位或运算符|同样是一种按位操作的运算符,它会对参与运算的两个数的二进制位进行逐位比较。只要两个相应的二进制位中有一个为1,结果位就为1;只有当两个位都为0时,结果位才为0。与位与运算符类似,位或运算符的两边也可以是任何数值类型,且不具备“短路效应”。

示例

int a = 3; // 二进制为 0011  
int b = 5; // 二进制为 0101  
int result = a | b; // 结果为 0111,即7

四、区别与联系:深入剖析

4.1 逻辑与位运算的本质区别
  • 运算对象:逻辑运算符(&&、||)的运算对象只能是布尔表达式,而位运算符(&、|)的运算对象可以是任何数值类型。
  • 运算结果:逻辑运算符的结果为布尔值(true或false),而位运算符的结果为数值类型,表示按位操作后的结果。
  • 短路效应:逻辑运算符具有“短路效应”,即当第一个操作数已确定整个表达式的结果时,不会计算第二个操作数的值;而位运算符则不具备此特性,无论第一个操作数的值如何,都会计算第二个操作数的值。
4.2 实际应用场景
  • 逻辑运算符:在条件判断、循环控制等场景中广泛使用,用于根据条件执行不同的代码块。
  • 位运算符:在需要直接操作二进制位的场景中非常有用,如权限控制、位图处理、网络通信等。

五、总结与展望

通过本文的深入解析,我们不难发现,&、&&、|、||这四种运算符虽然看似简单,但背后却蕴含着丰富的逻辑与位运算知识。它们各自具有独特的特性和应用场景,在编程中发挥着不可或缺的作用。未来,随着技术的不断进步和编程语言的不断发展,这些运算符的应用也将更加广泛和深入。

在结束之际,让我们再次回顾这四位“双面舞者”的精彩表现:逻辑与运算符(&&)以其“短路效应”提高了程序的效率;逻辑或运算符(||)则在条件判断中展现了灵活多变的一面;位与运算符(&)和位或运算符(|)则在直接操作二进制位的场景中大放异彩。它们共同构成了编程世界中的一道亮丽风景线,引领着我们不断探索编程的奥秘与乐趣。

我会以“时”为尺,丈量自己的进步,用“嘉”言“嘉”行,努力珍惜时间,向着她一步步迈进!(眼中闪烁着坚定的光芒,透露出对未来的决心和期待)

respect!

相关文章:

逻辑与位运算的双面舞者:、、|、||深度解析

深入解析&、&&、|、||:逻辑与位运算的奥秘之旅 在编程的世界里,&、&&、|、||这四种运算符扮演着至关重要的角色。它们不仅仅是简单的符号,更是连接程序逻辑、实现复杂功能的桥梁。本文旨在深入探讨这四者的区别与联…...

中断门+陷阱门

中断门: 中断描述符在IDT表里面 kd> dq idtr 80b95400 83e48e000008bfc0 83e48e000008c150 80b95410 0000850000580000 83e4ee000008c5c0 80b95420 83e4ee000008c748 83e48e000008c8a8 80b95430 83e48e000008ca1c 83e48e000008d018 80b95440 000085000050…...

RTMP直播播放器的几种选择

如何选择RTMP播放器? 在选择RTMP播放器时,需要综合考虑多个因素,以确保选择的播放器能够满足实际需求并提供良好的用户体验。以下是一些选择RTMP播放器的建议: 1. 功能需求 低延迟:对于直播场景,低延迟是…...

初识爬虫1

学习路线:爬虫基础知识-requests模块-数据提取-selenium-反爬与反反爬-MongoDB数据库-scrapy-appium。 对应视频链接(百度网盘):正在整理中 爬虫基础知识: 1.爬虫的概念 总结:模拟浏览器,发送请求,获取…...

【趣学Python算法100例】兔子产子

问题描述 有一对兔子,从出生后的第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子,假设所有的兔子都不死,问30个月内每个月的兔子总对数为多少? 题目解析 兔子产子问题是一个有趣的古典数学问题&#xff0c…...

HTTP 四、HttpClient的使用

一、简单介绍 1、简介 HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。HttpClient已经应用在很多的项目中,比如Apache Jakarta上很著…...

C语言:结构体变量

1. 结构体变量的引用方法 例如,若有数据定义: struct Student{char name[10];int age;struct Date birthday; }s1,s2,stu[10]; 则下面对结构体变量的引用都是正确的: s1.age20; scanf("%d",&s1.age); gets(stu[0].name); s…...

bibtex是什么

BibTeX 是一个用于处理和格式化参考文献的工具,常与 LaTeX 一起使用。它提供了一种方便的方式来管理和生成参考文献列表,特别适用于学术写作和科研论文中。以下是对 BibTeX 的详细介绍: 基本概念 BibTeX 是 LaTeX 的一个附加工具&#xff0…...

【大模型专栏—进阶篇】智能对话全总结

大模型专栏介绍 😊你好,我是小航,一个正在变秃、变强的文艺倾年。 🔔本文为大模型专栏子篇,大模型专栏将持续更新,主要讲解大模型从入门到实战打怪升级。如有兴趣,欢迎您的阅读。 &#x1f4…...

MVC应用单元测试以及请求参数的验证

SpringMVC支持对Controller单元测试 RunWith(SpringJUnit4ClassRunner.class) ContextConfiguration(locations {"classpath:mvc-dispatcher-servlet.xml", }) WebAppConfiguration public class ControllerJUnitBase{Resourceprivate RequestMappingHandlerMappin…...

算法:TopK问题

题目 有10亿个数字,需要找出其中的前k大个数字。 为了方便讲解,这里令k为5。 思路分析(以找前k大个数字为例) 很容易想到,进行排序,然后取前k个数字即可。 但是,难点在于,10亿个数…...

.json文件的C#解析,基于Newtonsoft.Json插件

目录 1. 前言 2. 正文 2.1 问题 2.2 解决办法 2.2.1 思路 2.2.2 代码实现 2.2.3 测试结果 3. 备注 1. 前言 天气晚来秋,这几天天气变凉了,各位同学注意好多穿衣服。回归正题 由于需要,需要将json的配置里面的调理解析出来,做成接口,以便于开发。 2. 正文 2.1 …...

四、(JS)JS中常见的加载事件

一、文档加载监听 (1)抛出疑惑,什么是文档加载监听?为什么要有这个东西? 老样子,我们先讲一个场景,带着大家熟悉为什么会有文档加载监听,是来解决什么问题来着的。 我们先看下这段…...

[网络]https的概念及加密过程

文章目录 一. HTTPS二. https加密过程 一. HTTPS https本质上就是http的基础上增加了一个加密层, 抛开加密之后, 剩下的就是个http是一样的 s > SSL HTTPS HTTP SSL 这个过程, 涉及到密码学的几个核心概念 明文 要传输的真正意思是啥 2)密文 加密之后得到的数据 这个密文…...

React 嵌套类名样式不生效

修改前 父级.blog样式生效&#xff0c;子级.circle样式不生效 // app/blog/page.js import styles from "./page.module.scss"export default function Blog () {return (<div className{styles.blog}><div classNamecircle><div /></div>…...

20Kg载重30分钟续航多旋翼无人机技术详解

一、机架与结构设计 1. 材料选择&#xff1a;为了确保无人机能够承载20Kg的负载&#xff0c;同时实现30分钟的续航&#xff0c;其机架材料需选用轻质高强度的材料&#xff0c;如碳纤维或铝合金。这些材料不仅具有良好的承重能力&#xff0c;还能有效减轻无人机的整体重量&…...

详解c++:认识类

文章目录 前言一、类是什么二、类&#xff08;class&#xff09;的使用publicprivate&#xff1a;protected&#xff1a; 前言 C 是一种面向对象的编程语言。面向对象编程是一种编程范式&#xff0c;它使用“对象”来设计软件应用程序。在面向对象编程中&#xff0c;对象包含了…...

HTML5中的重要元素详解

第3章 HTML5中的重要元素 3.1 html根元素 HTML文档中&#xff0c;元素html代表了文档的根&#xff0c;其他所有元素都是在该元素的基础上进行延伸或拓展的&#xff0c;该元素也是HTML文档的最外层元素&#xff0c;因此也称为根元素。 html元素的常用属性&#xff1a; manif…...

八股文知识汇总(常考)

八股文知识汇总&#xff08;常考&#xff09; 语言特性相关 JAVA知识 - JDK动态代理为什么只能代理有接口的类&#xff1f; 说一下对象创建的过程&#xff1f;ThreadLocal是什么&#xff1f;他的实现原理是什么&#xff1f;ThreadLocal会出现内存泄露吗&#xff1f;String、…...

unity 图片置灰shader

我和chatgpt真强&#xff01; 在 Unity 编辑器中&#xff0c;右键点击 Assets 文件夹&#xff0c;选择 Create -> Shader -> Unlit Shader。shader代码如下&#xff0c;尽管我看的不是很懂&#xff0c;但确实有用 Shader "Custom/GrayScaleShader" {Properti…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...