逍遥自在学C语言 | 逻辑运算符
前言

一、人物简介
- 第一位闪亮登场,有请今后会一直教我们C语言的老师 —— 自在。

- 第二位上场的是和我们一起学习的小白程序猿 —— 逍遥。

二、构成和表示方式
- 逻辑运算符是用来比较和操作布尔值的运算符
- C语言中的逻辑运算符主要有3个,如下表所示
| 运算符 | 名称 | 示例 | 描述 |
|---|---|---|---|
| && | 与 | a && b | 当a和b都为真时,返回真 |
| || | 或 | a || b | 只要a或者b,其中任何一个为真,返回真 |
| ! | 非 | !a | 如果a的条件为真,返回假 |
- 逻辑运算符的两边可以是变量、数值 或 表达式
变量
a && b
a || b
!a
数值
5 && 3
20 || a
!0
表达式
a+b && c
a-b || c-a
!(a+c)
三、逻辑运算符的应用
1、运算结果
逻辑运算符的运算结果为0(假)或者1(真)
- 当条件成立时结果为
真,条件不成立结果则为假。
1.1 与运算
- 实例演示
#include <stdio.h>
int main() {
printf("1 && 2 结果为%d\n", 1 && 2);
printf("0 && 3 结果为%d\n", 0 && 3);
printf("5 && 0 结果为%d\n", 5 && 0);
printf("0 && 0 结果为%d\n", 0 && 0);
return 0;
}
- 运行结果

1.2 或运算
- 实例演示
#include <stdio.h>
int main() {
printf("1 || 2 结果为%d\n", 1 || 2);
printf("0 || 3 结果为%d\n", 0 || 3);
printf("5 || 0 结果为%d\n", 5 || 0);
printf("0 || 0 结果为%d\n", 0 || 0);
return 0;
}
- 运行结果

1.3 非运算
- 实例演示
#include <stdio.h>
int main() {
printf("!2 结果为%d\n", !2);
printf("!0 结果为%d\n", !0);
return 0;
}
- 运行结果

!! ,将任何值转换为布尔值
!!可以将一个整数、字符或指针值转换为一个布尔值。
例如,下面的代码片段中,将字符串转换为布尔值,并将其用于条件判断:
#include <stdio.h>
int main()
{
char *str = "hello";
int bool_value = !!str;
if(bool_value)
{
printf("str is not null\n");
}
else
{
printf("str is null\n");
}
return 0;
}
- 运行结果

由于hello是一个非空字符串,所以!!将其转换为1,if条件语句的条件将被认为是真,所以第一个printf语句将被执行。
反之,如果字符串“str”为NULL,则!!将其转换为0,if条件将被认为是假,第二个printf语句将被执行。
2、运算符嵌套
逻辑运算符是允许嵌套使用的,运算的结果可以继续作为逻辑运算符的一个参数
实例演示
#include <stdio.h>
int main() {
int a = !( (6 > 3) && (11 - 20) && (0 - 1) );
int b = !( (5 + 4) && (7 - 8) && (3 < 2) );
printf("a = %d\n", a);
printf("b = %d\n", b);
return 0;
}
- 运行结果

第一个嵌套表达式分析
- 因为
6 > 3的结果为1,11 - 20的结果为-9,所以(6 > 3) && (11 - 20) && (0 - 1)等价于1 && -1,结果为1 - a =
!(1),结果为0
第二个嵌套表达式分析
5 + 4的结果为1,7 - 8的结果为-13 < 2的结果为0- 所以
(5 + 4) && (7 - 8) && (3 < 2)等价于9 && 0,结果为0 - a =
!(0),结果为1
3、优先级
- 先来看这个实例
#include <stdio.h>
int main() {
int a = !( 1 || -1 && 0 );
printf("a = %d\n", a);
return 0;
}

- 那么实际的运行结果如何呢?


- 因为
&&的优先级高于||,所以-1 && 0会被先运算,结果为0 1 || -1 && 0等价于1 || 0,结果为1- a =
!(1),结果为0
逻辑运算符的优先级顺序为 ∣∣ < && < !
有兴趣的小伙伴可以参考上面的代码来验证&&和!的优先级关系哦!
小结
通过本文的讲解,我们学会了3种逻辑运算符的使用方法及优先级关系,下一篇文章,我们将讲解位运算符。
逍遥自在学C语言 | 逻辑运算符的更多相关文章
- malloc函数详解 C语言逻辑运算符
今天写线性表的实现,又遇到了很多的难题,C语言的指针真的没学扎实.很多基础都忘了. 一是 :malloc 函数的使用. 二是:C语言逻辑运算符. 一.原型:extern void *malloc(un ...
- 小朋友学C语言(7)
数组 一.数组简介 C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合.数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量. 数组的声明并不是声明一个个单独的变量,比 ...
- 小C的故事(快速学C语言,,,极速版!)
前几天这篇博客写了太多废话! 删啦~~. 本篇博客只是为chd A协的全嫩小鲜肉入门C语言的预科, 如果你在此处学习C语言, 不幸走火入魔, 小弱概不负责. //请直接随便找个C语言编译器,抄一下下面 ...
- 边看MHA源码边学Perl语言之一开篇
边看MHA源码边学Perl语言之一开篇 自我简介 先简单介绍一下自己,到目前为此我已经做了7年左右的JAVA和3年左右php开发与管理,做java时主要开发物流行业的相关软件,对台湾快递,国际快递,国 ...
- 快看Sample代码,速学Swift语言(1)-语法速览
Swift是苹果推出的一个比较新的语言,它除了借鉴语言如C#.Java等内容外,好像还采用了很多JavaScript脚本里面的一些脚本语法,用起来感觉非常棒,作为一个使用C#多年的技术控,对这种比较超 ...
- 我为什么要学Go语言
# 我为什么要学Go语言 ### 公司的强烈推荐---之前也了解过Go语言并没有觉得有什么了不起,Go能做的其他语言都能做. ### 网上查找学习Go语言的理由---网上大体有两类人,一类说Go是大公 ...
- 为什么学Python语言,只需四步全面了解Python语言
为什么学Python语言,只需四步全面了解Python语言每个时代都会悄悄犒赏会选择的人,Python现在风口的语言Python--第三大主流编程语言Python , 是一种面向对象的解释型计算机程序 ...
- 快看Sample代码,速学Swift语言(2)-基础介绍 快看Sample代码,速学Swift语言(1)-语法速览
快看Sample代码,速学Swift语言(2)-基础介绍 Swift语言是一个新的编程语言,用于iOS, macOS, watchOS, 和 tvOS的开发,不过Swift很多部分内容,我们可以从C或 ...
- C语言和C++的应用领域都在哪些?学C语言好,还是学习C++好?
从事嵌入式开发十几年,基本上围绕着这两种编程语言展开,都可以直接操作底层的编程语言,用的越熟练越是感觉工具属性越强.虽然两种编程语言分属于不同的编程思想,用的时间长了觉得差异也不是很大,现在就个人的从 ...
- 从零开始学C语言
从零开始学C语言 @阆苑祁寒 更新时间:2019-09-13 写在前面:本文从一个初学者的角度,给出了对C语言的简单理解.如有谬误,敬请指出! Week1——基本语法 #include <std ...
随机推荐
- JetPack Compose 入门还得是官方
官方写的真不错! 和那些所谓"教程"比真的简单高效不罗嗦! 所以还得是官方! 使用 Jetpack Compose 更快地打造更出色的应用 https://developer.an ...
- linux-vi/vim常用操作键
命令模式: :w 将编辑的数据写入硬盘档案中(常用) :w! 若文件属性为『只读』时,强制写入该档案.不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊! :q 离开 vi (常用) :q! 若 ...
- nodejs 配置国内镜像
npm config set registry https://registry.npm.taobao.org npm config set disturl https://npm.taobao.or ...
- snpEFF注释的vcf文件转化成maf文件
利用一个perl语言写的工具:snpeffTomaf 一行代码即可实现非常方便 github地址链接:https://github.com/tsy19900929/snpeffToMaf 将此仓库中的 ...
- [杂谈吐槽]UE国内社区环境
此篇博客是我个人想法,当然也是不争的事实,如果您有意见,那您也是我说那些人其中的一员. --此部分为社区环境差最恶劣的原因-- 国内的虚幻社区环境可以说不能再烂了,虚幻商城和虚幻引擎的蓝图是非常强大的 ...
- VUE keepAlive缓存问题之动态使用exclude(会使用到VUEX)
exclude是啥? 官方解释: 怎么用呢? 处理的问题是什么?(答:返回首页的时候清除B页面的缓存) 我遇到的问题是: 一开始状态:A(首页). B(列表).C(列表中的详情)三个页面,设置B页面的 ...
- Linux命令 之 contrab
crontab 命令是用来在linux平台上执行 定时任务的命令: 默认是在安装完操作系统之后,便会启动此任务的调度 crontab 会在每分钟检查是否有要执行的任务,如果有便会执行该任务:新建的cr ...
- oracle 将以逗号分隔的列拆成多行的的方法
原表如下 select * from hs_acct.custattach a where a.client_id='888827395'; 将列拆分成多行的语句 select * from ( -- ...
- CentOS 7(Linux)安装Docker
CentOS 7(Linux)安装Docker 一.分别执行下列命令添加并更新yum源 yum update yum install epel-release -y yum clean all yum ...
- 在VS中使用Wind数据终端API的经验(一)
因工作需要,使用vs2019来调用Wind金融终端API数据接口.具体步骤按照wind的帮助文档一步步做下来.这里提一下和帮助文档不同的地方. Windows Console APP下,编译项目后出现 ...