C语言基础要素(013):逻辑运算

C零基础课程-14-逻辑运算符 文章目录C语言中的逻辑运算符逻辑与运算符“&&”逻辑或运算符“||”逻辑非运算符“!”逻辑运算符的短路特点 C语言中的逻辑运算符 C语言中的逻辑运算符有“&&”、“||”、及“!”,他们分别被称为逻辑与、逻辑或、逻辑非。 前两者是二元运算符,逻辑非是一元运算符。 逻辑与运算符“&&” 逻辑与运算符的基本语法是: 表达式1 && 表达式... 阅读详情

关系运算符使我们具有表达单一条件的能力,而逻辑运算让我们拥有多个关系处理的可能。

  • &&:逻辑与运算,简称与运算。
  • ||:逻辑或运算,简称或运算。
  • ! :逻辑非运算,简称非运算。

加减(+、-)运算需要左右两个操作数,如a+b;与此类似,与或运算(&&、||)需要左右两个关系表达式,它们具有从左向右的结合性。如,a && b,表示先计算表达式a,成立的话再计算表达式b。赋值运算符(=)用于将右端值赋给左边变量,这被称为右结合性,非运算(!)与之类似,也具有右结合性;!0表示非0,即为真。

假设expr1和expr2是两个关系表达式,那么可以声明如下:

  • 仅当 expr1 和 expr2 都为真的时候,expr1 && expr2 才为真。
  • 如果 expr1 或 expr2 之一为真或二者都为真,expr1 || expr2 就为真。
  • 如果 expr1 为假,则 !expr1 为真;如果 expr1 为真,则 !expr1 为假。
#include <stdio.h>

int main()
{
    int a = 9;
    int b = 0;

    printf("3 && 7: %d\n", (3 && 7));
    printf("a && b: %d\n", (a && b));
    printf("b && a: %d\n", (b && a));

    printf("3 || a: %d\n", (3 || a));
    printf("b || a: %d\n", (b || a));

    printf("!3:     %d\n", !3);
    printf("!b:     %d\n", !b);

    return 0;
}

在这里插入图片描述

下面是例子的分析,注释后的第一列表示整个逻辑运算的结果,以短横线分隔的文本分别表示表达式的真假值。

3 && 7      // true  - 3(true) && 7(true)
a && b      // false - a(true) && b(false)
b && a      // false - b(false)

3 || a      // true - 3(true)
b || a      // true - b(false) || a(true)

!3          // false - !3(true)
!b          // true  - !b(false)

留意一下,在 &&、|| 运算中,第二个表达式有不需要计算的情形,如:

  • b && a:b为假,后面的a就不需要再计算了.
  • 3 || a:3为真,后的的a就不需要再计算了.

这也表明:

  • 逻辑与(&&)是并且关系: 当所有条件都成立时结果为true,如果有一个条件不成立则整个判断结束。
  • 逻辑或(||)是或者关系:当所有条件中有一个成立时整个判定结束,结果为true,否则判断下一个。
  • 逻辑非(!)是取反关系:非真为假,非假为真。

通过逻辑运算符,可以将多个条件组织起来,形成更复杂的条件判断。

#include <stdio.h>

int main()
{
    int a = 9;
    int b = 0;
    int c = 2;

    printf("(a && b) || (c >= 2) : %d\n", (a && b) || (c >= 2));
    printf("c > 2 && c < 9       : %d\n", c > 2 && c < 9);
    printf("!b || !a             : %d\n", !b || !a);

    return 0;
}

在这里插入图片描述

不恰当的表达

上面的例子中,我们使用

c > 2 && c < 9

来表达c位于一个区间的概念,在数学上,这可以写作:

2 < c < 9

但是在C语言中,这种表达是语义错误的,假设c的值为10,表达的计算过程如下:

  1. 计算表达式 2 < 10:为true
  2. 计算表达式 true < 9 而不是 10 < 9:右侧9是整数,true从bool转型到1,变成1<9,求值为true
  3. 整体表达式 2 < c < 10,求值为true

显然,这里的数学表示法并不能表达我们真正的意图,但它们却是有效的代码。与此类似,要比较3个数值是否相等,也不能用数学方法编写代码。

#include <stdio.h>

int main()
{
    int c = 2;
    printf("2 < c < 9   : %d\n", 2 < c < 9);

    int a = 9, b = 9;
    c = 9;
    printf("a == b == c : %d\n", a == b == c);

    return 0;
}

在这里插入图片描述

  • 2 < c < 9:解释为:(2 < c) < 9,即 0 < 9,结果为真。
  • a == b == c:将解释为:(a == b) == c,即1 == 9,结果为假。

最后,对于表达式中的关系与逻辑运算符的优先级,如:

c > 2 && c < 9

我们的本能是先判断 c>2,成立后再判断 c<9,最后将两者结果比较。这种语言设计上的特性也符合人的思维模式,因而,关系运算符优先级高于逻辑运算符。

练习

  1. 逻辑运算的短路模式带给你哪些编程启示?
  2. 将目前学过的运算符组织到逻辑运算中,看看有什么收获。
  3. 编写一段判断三个数是否相等的代码。
逻辑或、与、非、或非、与非、异或、同或运算 注:这七个运算均为二进制下的运算。 1.或:运算符 ' | ' 。若两个条件一个成立,则此运算为“真”。 即:0|1=1, 0|0=0, 1|1=1(此中一个为1,则全为1;否则为0) 2.与:运算符 ' & ' 。只有两个条件同时成立,此运算才为“真”。 即:0&1=0, 0&0=0, 1&1=1(此中一个为0,则全为0;否则为1) 3.非:运算符 ' ~ ' 。只有条件为“假”,此运算才为“真”。 即 10001101001进行“非”... 阅读详情

相关推荐

grafana使用方法

1、点击仪表盘2、新建仪表盘3、选择数据源4、选择查询的条件5、美化。

2403_87359664的博客 323

C语言中的与、或、非

1、逻辑与 在C语言中逻辑与用bai&&表示。 举例:a&&b(其中a、b都代du表一个条件) 如果a和b都为真,则结果为真,如果a和b中有一个条件为假,则结果为假。 2、逻辑或 在C语言中逻辑或用||表示。 举例:a||b(其中a、b都代表一个条件) 如果a和b有一个或以上为真,则结果为真,二者都为假时,结果为假。 3、逻辑非 在C语言中逻辑非用!表示。 举例:!a(a代表一个条件) 如果a为假,则!a为真,如果a为真,则!a为假。 以上三种逻辑运算符中,逻辑非 ! 的优

qq_44699174的博客 21万+

200_matlab处理NCEP数据并画全球彩色的风场图

200_matlab处理NCEP数据并画全球彩色的风场图。

miaobo0的博客 1240

与或非逻辑符号_理解FPGA的基础知识——逻辑电路

FPGA (Field Programmable Gate Aray,现场可编程门阵列)是一种可通过重新编程来实现用户所需逻辑电路的半导体器件。为了便于大家理解FPGA的设计和结构,我们先来简要介绍一些逻辑电路的基础知识。1.逻辑代数 逻辑代数中的变量称为逻辑变量,用大写字母表示。逻辑变量的取值只有两种,即逻辑0和逻辑1,0 和 1 称为逻辑常量,并不表示数量的大小,而是表示两种对...

weixin_39956558的博客 1万+

数据预处理的分箱操作

数据分箱 介绍 我们在建立模型前,一般需要对特征变量进行离散化,特征离散化后,模型会更稳定,降低模型过拟合的风险。尤其是采用 logsitic 建立评分卡模型时,必须对连续变量进行离散化。而特征离散化处理通常采用的就是分箱法,数据分箱(也称为离散分箱或分段)是一种数据预处理技术,用于减少次要观察误差的影响,提高泛化性。 数据分箱又分为有监督分箱和无监督分箱,是否使用标签进行离散化(分箱)决定了有监督还是无监督的离散化方法。 知识点 无监督分箱 split 分箱 merge 分箱 无监督分箱 这里为了

随笔记 5334

计算蛋白质结构中氨基酸之间的方向和方位

方向 (Direction):通过相邻氨基酸的 CαCα​ 原子坐标差值,得到方向向量,描述两个氨基酸之间的几何方向。方位 (Orientation):可以通过二面角(如 Psi)来表示相邻氨基酸之间的旋转关系,或者通过局部坐标系(基于 NN、CαCα​、CC 原子)描述残基的空间取向。这些计算是研究蛋白质结构动力学、折叠过程、以及相互作用的基础,尤其是在使用机器学习和深度学习模型进行蛋白质结构预测时,这些几何信息有助于更好地捕捉残基之间的空间关系。

qq_27390023的博客 1681

C语言-基本运算

1.除法运算 /    整数除于整数,还是整数。参与运算的操作数必须是同类型。    1/2的值是0。参与运算的操作数是什么类型,得出的值就是什么类型。   10.5 + 10将右边的10提升为了double类型 自动类型提升。    int b = 10.5 + 1.7; 自动将大类型转换为了小类型,会丢失精度。       double a = (double)1 /

追梦的小蚂蚁 2万+

新手避坑指南:用SARScape 5.6.2处理Sentinel-1数据做SBAS-InSAR,这些参数设置错了白忙活

本文详细介绍了使用SARScape 5.6.2处理Sentinel-1数据做SBAS-InSAR时的关键参数设置技巧,帮助新手避免常见错误。重点解析了连接图生成、干涉工作流、DEM处理等环节的12个关键参数,包括Max Normal Baseline、Unwrapping Coherence Threshold等,提供实测安全值范围和优化建议,确保处理效率和结果准确性。

weixin_30694389的博客 557

C语言:位运算符----与(&),或(|),非(~),异或(^),左移(<<)和右移(>>)

C语言中位运算符主要包括六种,具体如下: 与(&),或(|),非(~),异或(^),左移()

MQ0522的博客 4万+

Miniconda3迁移(附图详细过程)

服务器上目录占满,想要将conda迁移到其他目录下的操作方法,详细教程。

2301_77554343的博客 6943

数据挖掘实战-基于长短期记忆网络(LSTM)的黄金价格预测模型 | 97% 准确度

本实验基于Kaggle上提供的从2013年到2023年的黄金价格数据集,运用长短期记忆网络(LSTM)构建了黄金价格预测模型。该数据集详细记录了每日的黄金价格信息,包括开盘价、收盘价、高点、低点和交易量等,为模型的训练提供了丰富的数据支持。

m0_64336780的博客 1万+

零基础C语言入门013——逻辑运算符,与、或、非

003

alex5153的博客 1万+

跨应用服务器的自定义 IDoc 传输实战:以 CATSDB 工时为例,打通两套 SAP 系统的数据通道

本文介绍了在企业多SAP系统环境下,使用SAP ALE/IDoc技术实现工时数据跨系统传输的解决方案。文章从技术选型、系统架构到具体配置步骤进行了详细说明,重点阐述了IDoc/ALE在异步传输、全链路追踪和数据重放方面的优势。 文章详细讲解了端到端实施流程,包括Logical System配置、RFC Destination创建、Message Type定义、Segment和Basic Type设计等关键步骤。同时提供了出站封装的ABAP代码示例,强调调用MASTER_IDOC_DISTRIBUTE函数后执

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 173

计算机组成原理16位算数逻辑运算实验报告,湘潭大学计算机原理实验一算术逻辑运算实验预习报告...

湘潭大学计算机原理实验一算术逻辑运算实验预习报告 (18页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!14.9 积分实验一算术逻辑单元ALU一•实验目的1. 理解算术逻辑单元ALU的工作原理。2. 掌握算术逻辑单元ALU的设计方法。3. 验证32位算术逻辑单元ALU的加、减、与、移位功能。4. 按给定数据,完成几种指定的算术和逻辑运算。二. 实验内...

weixin_28912017的博客 1609

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

数据库系统原理与应用教程(013)—— 关系代数练习题

关系代数

睿思达DBA 9046

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【试题013】C语言连续赋值应用

1.题目:设int a = 1,b = 2,c = 3;,能将c的值同时赋给a和b的表达式是?

Starblingbling的博客 138

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

c语言中1%3c%3c2 什么意思,c语言练习题

篇一:C语言考试题库及答案C语言理论上机考试选择题部分(共200题,仅针对11级定向专业)1、下面程序的输出是___D______#include void main() { int k=11;printf("k=%d,k=%o,k=%x\n",k,k,k); } A) k=11,k=12,k=11 B) k=11,k=13,k=13 C) k=11,k=013,k=0xbD) k=11,k=1...

weixin_35660371的博客 3149

逻辑运算

位运算     位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果。 位运算符有:     &(按位与)、|(按位或)、^(按位异或)、~ (按位取反)。     其中,按位取反运算符是单目运算符,其余均为双目运算符。     位运算符的优先级从高到低,依次为~、&、^、|,     其中~的结合方向自右至左

Acettest's Blogs 711

2016大一c语言考试题库,2016最新上机考试C语言考试题库及答案.doc

C语言理论上机考试选择题部分(共200题,仅针对11级定向专业)1、下面程序的输出是___D______#includevoid main(){ int k=11;printf("k=%d,k=%o,k=%x\n",k,k,k);}A) k=11,k=12,k=11 B) k=11,k=13,k=13C) k=11,k=013,k=0xb D) k=11,k=1...

weixin_35897916的博客 305

c语言中的字符常量是用一堆单引号('')括起来的单个字符,C语言程序设计基础练习2.doc...

C语言程序设计基础练习2.docC语言程序设计基础一、选择题1.C语言中确定数据存储的格式、范围与有效位数的依据是A.数据正负B.数据范围C.数据类型D.数据大小2.一般说在C语言中字符型数据、整型数据、单精度浮点型及双精度浮点型数据的存储长度分别为A.2、4、8、1B.4、2、1、8C.1、2、4、8D.1、4、2、83.转义字符“\t”表示A.横向跳格,即跳到下一个输出区B.竖向跳格C.退格D...

weixin_35051558的博客 1288

c语言表达式计算题库,c语言表达式题库.doc

C语言程序设计表达式一、表达式求值1.表达式:!(4<=6)&&(3<=7) 的值为_______ 02.表达式:x=!(2<5==5) 的值为【1】 13.如果有变量定义:int i=1,j=8,a;则表达式:a=i+(j%4!=0) 的值为_【1】 14.表达式:x=(7+6)%4/2 的值为【1】 05.如果有变量定义:int x,则表达式:x=-3*4%-...

weixin_34355348的博客 2643

数据结构-作业1 (C语言)基础知识

一. 单选题(共40题,100分)

天道的博客 508

c语言基本练习题 doc,C语言重点复习题2.doc

C语言重点复习题2.doc下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。2.下载的文档,不会出现我们的网址水印。3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。文档包含非法信息?点此举报后获取现金奖励!下载文档到电脑,查找使用更方便20积分还剩页未读,继续阅读关键词:...

weixin_36017951的博客 5094

C_6练习题答案

2,下列函数 int fun(int score[], int m, int below])的功能是:计算score中m个人的平均成绩aver,将低于 aver 的成绩放在 below 中,通过函数返回人数。3.下列程序功能是:用结构体描述一个学生的情况:姓名,成绩,年级,编写程序输入10个人的情况,为每个人成绩增加10%,年级增加1年级,并输出修改后的结果。在每小题给出的四个备选项中,选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。有如下程序段int *p=&a,a=10 ,b=1;

分享 Windows 系统部署、镜像封装、终端管理、故障排查与运维自动化实践,涵盖 Sysinternals、PowerShell 和 AI 工具应用。记录真实问题、探索过程与解决方法,也分享 AI 时代的学习心得和实践经验,让技术更易理解 2万+
上一篇: Proser:重大更新,增加标尺功能!
下一篇: C语言基础要素(014):分支控制:if 语句
glimix
博客等级 码龄24年 241粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值