C语言中逻辑运算符与条件运算符的学习教程_C 语言

逻辑运算符

逻辑运算符,用于对包含关系运算符的表达式进行组合,形成新的表达式;结果也是只有真或假两种情况,结果值用 BOOL 类型变量存储。

运算符 解释 结合方式
() [] -> . 括号(函数等),数组,两种结构成员访问 由左向右
! ~ ++ -- + - 

* & (类型) sizeof

否定,按位否定,增量,减量,正负号,

间接,取地址,类型转换,求大小

由右向左
* / % 乘,除,取模 由左向右
+ - 加,减 由左向右
<< >> 左移,右移 由左向右
< <= >= > 小于,小于等于,大于等于,大于 由左向右
== != 等于,不等于 由左向右
& 按位与 由左向右
^ 按位异或 由左向右
| 按位或 由左向右
&& 逻辑与 由左向右
|| 逻辑或 由左向右
? : 条件 由右向左
= += -= *= /= 

&= ^= |= <<= >>=

各种赋值 由右向左
, 逗号(顺序) 由左向右

使用方法:

表达式1 逻辑运算符 表达式2

逻辑与:a >= b && a > 5 只有当运算符两边为真的时候这个表达式为真,一个表达式为假的时候,表达式的结果就为假。

int a = 5;
int b = 6;
if(a >= b && a > 5)
{
 printf("表达式为真\n");
}
else
{
 printf("表达式为假\n");
}

int a = 5;
int b = 6;
if(a >= b && a > 5)
{
 printf("表达式为真\n");
}
else
{
 printf("表达式为假\n");
}

大家可以试着改变 a 和 b 的值看一下结果。

逻辑或:a >= b || a > 5 只要其中一个结果为真,这个表达式就为真。

int a = 6;
int b = 7;
if(a >= b || a > 5)
{
 printf("表达式为真\n");
}
else
{
 printf("表达式为假\n");
}

int a = 6;
int b = 7;
if(a >= b || a > 5)
{
 printf("表达式为真\n");
}
else
{
 printf("表达式为假\n");
}

a >= b 为假,但是 a > 5 为真,所以会打印:表达式为真。

逻辑非:!a,如果 a 为真,那么 !a 为假,如果 a 为假,那么 !a 为真。

BOOL flag = YES;
printf("!flag = %d\n", !flag);
printf("flag = %d\n", flag);

BOOL flag = YES;
printf("!flag = %d\n", !flag);
printf("flag = %d\n", flag);

第一行打印输出:!flag = 0

第二行打印输出:flag = 1

逻辑运算符的短路

逻辑与的短路:&& 左侧为假,右侧不参与运算。

例如:

int a = 6;
int b = 0;
if(a >= 10 && b = 5)
{
 printf("表达式的值为真\n");
}
printf("b = %d\n", b);

int a = 6;
int b = 0;
if(a >= 10 && b = 5)
{
 printf("表达式的值为真\n");
}
printf("b = %d\n", b);

这里 b 的输出结果为:0,因为在表达式 a >= 10 && b = 5 中,a >= 6 为真,所以右侧的 b = 5 不参与运算,所以 b 还等于原来的 0。

逻辑或的短路:|| 左侧为真,右侧不参与运算。

例如:

int a = 6;
int b = 0;
if(a >= 6 || b = 5)
{
 printf("表达式的值为真\n");
}
printf("b = %d\n", b);

int a = 6;
int b = 0;
if(a >= 6 || b = 5)
{
 printf("表达式的值为真\n");
}
printf("b = %d\n", b);

这里 b 的输出结果为:0,因为在表达式 a >= 6 || b = 5 中,a >= 6 为真,所以右侧的 b = 5 不参与运算,所以 b 还等于原来的 0。

条件运算符

符号是这个 ?: 一个问号和一个冒号,英文字符。C 语言中唯一的一个三目运算符。

由条件运算符组成条件表达式的一般形式为:

条件表达式? 表达式1:表达式2

如果条件表达式为真,整个表达式的值为表达式1的值;

如果条件表达式为假,整个表达式的值为表达式2的值。

求三个数的最大值,使用条件运算符就是这样写:

int a = 5;
int b = 6;
int c = 9;
int max = a > b ? a : b;
max = max > c ? max : c;
//也可以这样写,更加简单
//int max = a > b ? (a > c ? a : c) : (b > c ? b : c);

int a = 5;
int b = 6;
int c = 9;
int max = a > b ? a : b;
max = max > c ? max : c;
//也可以这样写,更加简单
//int max = a > b ? (a > c ? a : c) : (b > c ? b : c);

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c语言
, 运算符
, 条件运算符
逻辑运算符
,以便于您获取更多的相关知识。

时间: 2024-08-01 16:11:32

C语言中逻辑运算符与条件运算符的学习教程_C 语言的相关文章

C语言中的函数指针基础学习教程_C 语言

顾名思义,函数指针就是函数的指针.它是一个指针,指向一个函数.看例子: A) char * (*fun1)(char * p1,char * p2); B) char * *fun2(char * p1,char * p2); C) char * fun3(char * p1,char * p2); 看看上面三个表达式分别是什么意思? C)这很容易,fun3是函数名,p1,p2是参数,其类型为char *型,函数的返回值为char *类型. B) 也很简单,与C)表达式相比,唯一不同的就是函数的

C语言编程中的联合体union入门学习教程_C 语言

联合体(union)在C语言中是一个特殊的数据类型,能够存储不同类型的数据在同一个内存位置.可以定义一个联合体使用许多成员,但只有一个部件可以包含在任何时候给定的值.联合体会提供使用相同的存储器位置供多用途的有效方式. 定义联合体要定义联合体,必须使用union语句很相似于定义结构.联合体声明中定义了一个新的数据类型,程序不止一个成员.联合体声明的格式如下: union [union tag] { member definition; member definition; ... member

完全掌握C++编程中构造函数使用的超级学习教程_C 语言

构造函数是一种可初始化其类的实例的成员函数.构造函数具有与类相同的名称,没有返回值.构造函数可以具有任意数量的参数,类可以具有任意数量的重载构造函数.构造函数可以具有任何可访问性(公共.受保护或私有).如果未定义任何构造函数,则编译器会生成不采用任何参数的默认构造函数:可以通过将默认构造函数声明为已删除来重写此行为.构造函数顺序构造函数按此顺序执行工作: 按声明顺序调用基类和成员构造函数. 如果类派生自虚拟基类,则会将对象的虚拟基指针初始化. 如果类具有或继承了虚函数,则会将对象的虚函数指针初始

C++编程中new运算符的使用学习教程_C 语言

new运算符用作从自由存储为 type-name 的对象或对象数组分配内存,并将已适当分类的非零指针返回到对象. [::] new [placement] new-type-name [new-initializer] [::] new [placement] ( type-name ) [new-initializer] 备注如果不成功,则 new 将返回零或引发异常:有关详细信息,请参阅 new 和 delete 运算符. 通过编写自定义异常处理例程并调用 _set_new_handler

C++编程中的数据类型和常量学习教程_C 语言

C++数据类型计算机处理的对象是数据,而数据是以某种特定的形式存在的(例如整数.浮点数.字符等形式).不同的数据之间往往还存在某些联系(例如由若干个整数组成一个整数数组).数据结构指的是数据的组织形式.例如,数组就是一种数据结构.不同的计算机语言所允许使用的数据结构是不同的.处理同一类问题,如果数据结构不同,算法也会不同.例如,对10个整数排序和对包含10个元素的整型数组排序的算法是不同的. C++的数据包括常量与变量,常量与变量都具有类型.由以上这些数据类型还可以构成更复杂的数据结构.例如利用

C++中的while循环和for循环语句学习教程_C 语言

C++ while循环 while语句的一般形式如下: while (表达式) 语句 其作用是: 当指定的条件为真(表达式为非0)时,执行while语句中的内嵌语句.其流程图见下图. 其特点是:先判断表达式,后执行语句.while循环称为当型循环. 例:求1+2+3+-+100. #include <iostream> using namespace std; int main( ) { int i=1,sum=0; while (i<=100) { sum=sum+i; i++; }

C语言中的结构体的入门学习教程_C 语言

C语言中数组允许定义类型的变量,可容纳相同类型的多个数据项,但结构体在C语言编程中,它允许定义不同种类的数据项可供其他用户定义的数据类型. 结构是用来代表一个记录,假设要跟踪图书馆的书籍.可能要跟踪有关每本书以下属性: Title - 标题 Author - 作者 Subject - 科目 Book ID - 编号 定义结构体定义一个结构体,必须使用结构体的struct语句.该struct语句定义了一个新的数据类型,程序不止一个成员.struct语句的格式是这样的: struct [struct

C语言编程中函数的基本学习教程_C 语言

C 语言中的函数等价于 Fortran 语言中的子程序或函数,也等价于 Pascal 语言中的过程或函数.函数为计算的封装提供了一种简便的方法,此后使用函数时不需要考虑它是如何实现的.使用设计正确的函数,程序员无需考虑功能是如何实现的,而只需知道它具有哪些功能就够了.在 C 语言中可以简单.方便.高效地使用函数.我们经常会看到在定义后仅调用了一次的短函数,这样做可以使代码段更清晰易读. 到目前为止,我们所使用的函数(如 printf.getchar 和 putchar 等)都是函数库中提供的函数

简单总结C语言中各种类型的指针的概念_C 语言

C语言中有很多关于指针的使用,指针也是C语言的灵魂所在,而且C语言中也有很多有关指针的概念,这里学习并总结了一些知道的概念.  常量指针:首先它是一个指针,常量只是用来修饰指针的定语.其定义如下: char const * cp; char a='a'; 如何识别呢?根据右结合优先,先是*优先,所以这个cp变量是一个指针,然后是const修饰*,所以这是一个常量指针.即指向常量的指针. cp=&a; //正常语法 *cp=a; //错误语法,因为其指向的值是一个常量  指针常量:首先它是一个常量