C语言什么叫逻辑短路?

一、问题

        只有电路中才听说过短路。逻辑短路,不像是什么好词⼉。这个词不是描述⼈的,是描述C语⾔程序的。它是程序执⾏时的⼀种特殊的跳跃状态。那么逻辑短路具体是什么呢?

二、解答

        C语⾔中,表⽰条件时⽤关系表达式,即由关系运算符>、>=、<、<=、==、!=六个运算符之⼀连接起来的表达式。当表⽰复杂条件时,可以将多个关系表达式⽤逻辑运算符连接,构成逻辑表达式。

C语⾔中的逻辑运算符有3个:1、&&⽤于连接两个条件,当这两个条件同时成⽴时,整个条件成⽴。2、||⽤于连接两个条件,这两个条件只要有⼀个成⽴,整个条件就成⽴。3、!只在其后连接⼀个表达式,取与这个表达式结果相对的逻辑值,即真变假,假变真。

        在&&的使⽤中,如:a>0&&a<=100,a 的值如果等于-5,这时条件的前⼀部分就不成⽴,对于&&来说,不管后⾯的条件是否成⽴,整个条件都不会成⽴(这两个条件同时成⽴时,整个条件就成⽴)。

        或者说,&&后⾯的条件执不执⾏都不会改变整个表达式的取值,这样后半部分实际也就没必要执⾏了。在C语⾔中,既然没必要执⾏,那就不执⾏。这种 ⼀部分代码被跳过、不执⾏的情况就叫逻辑短路。

        &&可以构成逻辑短路,||也可以,||的功能是两个条件只要有⼀个成⽴,整个条件就成⽴。那如果前⼀半条件就成⽴,后⼀半也不⽤执⾏了,这就是由||构成的逻辑短路。

        只有这两种形式的逻辑短路。下⾯看⼀段程序。

#include <stdio.h>
int main()
{int a = 1, b = 2, c = 3, d = 4, e = 5;if (a > b && c++ > d){e++;}printf("%d,%d\n", c, e);return 0;
}

运行结果如下:

3,5

        因为 a>b 不成⽴,后⾯的 c++>d 没获得执⾏,因此。仍为3,⽽让条件不成⽴,e++ 没执⾏,e的值仍为5。

        如果程序中 迁⾏改为 证a<b&&c++>d),其他不变,结果应为“4,5”。因为此时 a<b成⽴,对&&来说,前半部分成⽴,不能决定整个表达式的值(如果后半部分成⽴,整体 就成⽴,后半部分不成⽴,整体就不成⽴),不构成逻辑短路。因此后半部分还要执⾏,结果为4,5。

三、总结

        在计算平均分是否及格的程序中,前⾯程序经运算得出 n 为科⽬数,§为总成绩,n有可能得0。程序可以写成:

if (n > 0 && s / n > 60)
{...
}

        这样的程序在C语⾔中是正确的,在其他没有逻辑短路的语⾔中是错误的。 如果没有逻辑短路,以上程序就会存在安全隐患,因为当n=0 时,就会出现除0错,系统 直接异常退出。有逻辑短路做保障,以上程序可以在C语⾔中正确运⾏。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/685897.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c# BlockingCollection 清空

BlockingCollection<T>在C#中是一个线程安全的集合&#xff0c;用于并发场景。它不提供一个直接的Clear方法&#xff0c;因为这样在多线程环境下可能会引入竞争条件和其他线程安全问题。 如果你真的需要清空这个集合&#xff0c;你可以通过手动取出每一个元素来实现。以下…

数据库事务的4个特性(ACID)

数据库事务具有四个重要的特性&#xff0c;通常称为ACID特性&#xff0c;分别是原子性&#xff08;Atomicity&#xff09;、一致性&#xff08;Consistency&#xff09;、隔离性&#xff08;Isolation&#xff09;和持久性&#xff08;Durability&#xff09;。下面分别对四种特…

【LeetCode: 107. 二叉树的层序遍历 II + BFS】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

相机的机身马达有什么用?

新手疑问&#xff1a; 为什么我的尼康D3200相机明明拥有拍视频能力&#xff0c;但是拍摄视频时却不能对焦 科普时间 那是因为你的相机缺少机身马达&#xff0c;并且你所使用的镜头也没有马达!机身马达是用于给镜头提供对焦动力的装置。它的作用是使相机具备自动对焦功能。如…

TCP常见问题详解

本篇文章我们介绍一下 在我们的面试中和实际开发中使用TCP遇到的问题 1.TCP在什么情况下出现大量的time_event 什么是time_event&#xff1f; 我们首先要弄清楚TIME_WAIT状态是什么&#xff1f;TIME_WAIT状态是主动关闭TCP连接的一方&#xff08;即先发起FIN包的一方&#xf…

node+vue3+mysql前后分离开发范式——实现视频文件上传并渲染

文章目录 ⭐前言⭐ 功能设计与实现💖 node上传文件写入file_map映射表💖 vue3前端上传文件回显⭐ 效果⭐结束⭐前言 大家好,我是yma16,本文分享关于 node+vue3+mysql前后分离开发范式——实现视频文件上传并渲染。 技术选型 前端:vite+vue3+antd 后端:node koa 数据库…

有了NULL,为什么C++还需要nullptr?

目录 1.引言 2.类型安全 3.函数重载 4.代码清晰性 5.示例 6.总结 1.引言 在C编程中&#xff0c;nullptr是一个类型安全的空指针常量&#xff0c;自C11起被引入。然而&#xff0c;在此之前&#xff0c;程序员们通常使用NULL或0来表示空指针。那么&#xff0c;为什么有了N…

在 MySQL 数据库中创建新账号并分配权限

本文介绍如何在 MySQL 数据库中创建新账号并为其分配特定数据库实例的权限。 一、连接到 MySQL 数据库 首先&#xff0c;使用 MySQL 客户端或其他数据库管理工具连接到 MySQL 数据库服务器。你可以使用以下命令。 mysql -u root -p 然后输入密码以登录到 MySQL。 二、创建新…

Leetcode 496. 下一个更大元素 I

题意理解&#xff1a; nums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个 比 x 大的元素。 给你两个 没有重复元素 的数组 nums1 和 nums2 &#xff0c;下标从 0 开始计数&#xff0c;其中nums1 是 nums2 的子集。 对于每个 0 < i < nums1.le…

JVM-垃圾回收(标记算法,收集器)

申明&#xff1a;文章内容是本人学习极客时间课程所写&#xff0c;文字和图片基本来源于课程资料&#xff0c;在某些地方会插入一点自己的理解&#xff0c;未用于商业用途&#xff0c;侵删。 原资料地址&#xff1a;课程资料 垃圾回收的基本原理 1 什么是垃圾&#xff1f; 在…

Linux :sh、可执行文件,无法使用. / 安装执行

问题 1. 我写了个 lib.sh 文件&#xff0c;发现我可以用 sh lib.sh 来执行&#xff0c;都是无法用 ./lib.sh执行。 2. 我发现当这个 lib.sh 文件用 ./lib.sh 无法执行的时候&#xff0c;我在终端打出 "./li " 它是无法帮我自动补全的。 其实就是这个时候 lib.s…

re:从0开始的CSS之旅 20. 渐变(暂完结撒花)

1. 渐变 渐变&#xff1a;使背景颜色有逐渐变化的效果 1. 线性渐变 background-image: linear-gradient(to left top, #c7edcc, #fde6e0, #dce2f1); 第一个参数可选值为&#xff1a; to top/right/left/bottom/top right/…… 第二个参数到第n个参数为需要渐变的颜色&#…

阿里云ECS香港服务器性能强大_安全可靠香港免备案服务器

阿里云香港服务器中国香港数据中心网络线路类型BGP多线精品&#xff0c;中国电信CN2高速网络高质量、大规格BGP带宽&#xff0c;运营商精品公网直连中国内地&#xff0c;时延更低&#xff0c;优化海外回中国内地流量的公网线路&#xff0c;可以提高国际业务访问质量。阿里云服务…

视觉slam十四讲学习笔记(六)视觉里程计 1

本文关注基于特征点方式的视觉里程计算法。将介绍什么是特征点&#xff0c;如何提取和匹配特征点&#xff0c;以及如何根据配对的特征点估计相机运动。 目录 前言 一、特征点法 1 特征点 2 ORB 特征 FAST 关键点 BRIEF 描述子 3 特征匹配 二、实践&#xff1a;特征提取…

《Linux 简易速速上手小册》第2章: 命令行的艺术(2024 最新版)

文章目录 2.1 基本 Linux 命令2.1.1 重点基础知识2.1.2 重点案例&#xff1a;整理下载文件夹2.1.3 拓展案例 1&#xff1a;批量重命名文件2.1.4 拓展案例 2&#xff1a;查找并删除特定文件 2.2 文件和目录管理2.2.1 重点基础知识2.2.2 重点案例&#xff1a;部署一个简单的网站2…

SpringMVC速成(二)

文章目录 SpringMVC速成&#xff08;二&#xff09;1.SSM整合1.1 流程分析1.2 整合配置步骤1&#xff1a;创建Maven的web项目步骤2:添加依赖步骤3:创建项目包结构步骤4:创建SpringConfig配置类步骤5:创建JdbcConfig配置类步骤6:创建MybatisConfig配置类步骤7:创建jdbc.properti…

《Go 简易速速上手小册》第2章:控制结构与函数(2024 最新版)

文章目录 2.1 条件语句&#xff1a;决策的艺术2.1.1 基础知识讲解2.1.2 重点案例&#xff1a;用户角色权限判断实现用户角色权限判断扩展功能实现代码功能扩展&#xff1a;添加或删除用户 2.1.3 拓展案例 1&#xff1a;成绩等级判断实现成绩等级判断功能实现代码扩展功能&#…

Electron实战之进程间通信

进程间通信&#xff08;IPC&#xff09;并非仅限于 Electron&#xff0c;而是源自甚至早于 Unix 诞生的概念。尽管“进程间通信”这个术语的确创造于何时并不清楚&#xff0c;但将数据传递给另一个程序或进程的理念可以追溯至 1964 年&#xff0c;当时 Douglas McIlroy 在 Unix…

Windows 连接共享文件夹 切换/退出账号操作

工作中遇到个问题&#xff0c;登录公司内部共享文件夹&#xff0c;使用自己的账号&#xff0c;但需要切换别人账号找东西时&#xff0c;没有发现登出的地方。在网上找了两种方法&#xff1a;通过命令行登出账号的方法 &#xff08;1&#xff09;打开cmd命令提示符&#xff0c;…

对待不合理需求,前端工程师如何优雅的say no!

曾经有位老板&#xff0c; 每次给前端提需求&#xff0c;前端都说实现不了&#xff0c;后来他搜索了一下&#xff0c;发现网上都有答案。他就在招聘要求上加了条&#xff1a;麻烦你在说不行的时候&#xff0c;搜索一下。 上面是一个段子&#xff0c;说的有点极端了&#xff0c;…