关系/条件/逻辑~操作符

简介: 关系/条件/逻辑~操作符

1.关系操作符

C 语⾔⽤于⽐较的表达式,称为 “关系表达式”(relational expression),⾥⾯使⽤的运算符就称

为“关系运算符”(relational operator),主要有下⾯6个。


• > ⼤于if (x == 3) {

printf("x is 3.\n");

}符

• < ⼩于运算符

• >= ⼤于等于运算符

• <= ⼩于等于运算符

• == 相等运算符

• != 不相等运算符


关系表达式通常返回 0 或 1 ,表⽰真假。

C 语⾔中, 0 表⽰假,所有⾮零值表⽰真。⽐如, 20 > 12 返回 1 , 12 > 20 返回 0 。关系表达式常⽤于 if 或 while 结构。如:


if (x == 3) {
 printf("x is 3.\n");
}


注意:相等运算符 == 与赋值运算符 = 是两个不⼀样的运算符,不要混淆。有时候,可能会不⼩⼼写

出下⾯的代码,它可以运⾏,但很容易出现意料之外的结果,如:


if (x = 3) ...


这样的话,如果把 == 误写成 = ,编译器就会报错。


另⼀个需要避免的错误是:多个关系运算符不宜连⽤。

如下面案例:


(i < j) < k//这种写法是错误的
i < j && j < k//这种是正确的


比如说:我们输⼊⼀个年龄,如果年龄在18岁~36岁之间,我们输出⻘年。


#include <stdio.h>
int main()
{
  int age = 0;
  scanf("%d", &age);
  if(18<=age<=36)
  {
  printf("⻘年\n");
 }
 return 0;
}//输入10,结果为:青年


,我们先拿18和age中存放的10⽐较,表达式18<=10为假, 18<=age 的结果是0,再拿0和

36⽐较,0<=36为真,所以打印了 ⻘年


2.条件操作符(c语言唯一3目操作符)

条件操作符也叫三⽬操作符,需要接受三个操作数的,形式如下:


exp1 ? exp2 : exp3


条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果;如果

exp1 为假, exp3 计算,计算的结果是整个表达式的结果。

如:


#include <stdio.h>
int main()
{
  int a = 0;
  int b = 0;
  scanf("%d %d", &a, &b);
  if (a > 5)
  b = 3;
  else
  b = -3;
  printf("%d\n", b);
 return 0;
}
改造后:
#include <stdio.h>
int main()
{
  int a = 0;
  int b = 0;
  scanf("%d %d", &a, &b);
  b = a>5 ? 3:-3;
  printf("%d\n", b);
 return 0;
}


3. 逻辑操作符:&& , || , !

逻辑运算符提供逻辑判断功能,⽤于构建更复杂的表达式,主要有下⾯三个运算符:


• ! :逻辑取反运算符(改变单个表达式的真假)。

• && :与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。

• || :或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)。


注:C语⾔中,⾮0表⽰真,0表⽰假

逻辑取反运算符

fb70100c4987437d943e80e997e81ef1.png

下面例子:


#include <stdio.h>
int main()
{
  int flag = 0;
  if(!flag)
  {
  printf("do something\n");
 }
 return 0;
}


如果 flag 为真, !flag 就是假,如果 flag 为假, !flag 就是真

所以上⾯的代码的意思就是 flag 为假,执⾏if语句中的代码。


4. 短路

C语⾔逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是

保证的。


如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。

如前⾯的代码:


if(month >= 3 && month <= 5)


如果month == 12,则不⽤再判断month是否等于1或者2,整个表达式的结果也是1(是冬季)。

所以, || 操作符的左操作数的结果不为0时,就⽆需执⾏右操作数。


像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进⾏计算的运算称为短

路求值。

int i = 0,a=0,b=2,d=4;


i = a++ || ++b || d++;//计算代码输出的结果

//结果为a=1,b=3,d=4
原因:a是使用在++,所以第一个||左边为0,即假,第一个||又边为真,第2个||后面不用计算,所以d不用加。


算数操作符:+、-、*、/、%

/

运算符 / ⽤来完成除法。

除号的两端如果是整数,执⾏的是整数除法,得到的结果也是整数。


#include <stdio.h>
int main()
{
  float x = 6 / 4;
  int y = 6 / 4;
  printf("%f\n", x); // 输出 1.000000
  printf("%d\n", y); // 输出 1
  return 0;
}


上⾯⽰例中,尽管变量 x 的类型是 float (浮点数),但是 6 / 4 得到的结果是 1.0 ,⽽不是

1.5 。原因就在于 C 语⾔⾥⾯的整数除法是整除,只会返回整数部分,丢弃⼩数部分。

如果希望得到浮点数的结果,两个运算数必须⾄少有⼀个浮点数,这时 C 语⾔就会进⾏浮点数除法。

#include <stdio.h>
int main()
{
 float x = 6.0 / 4; // 或者写成 6 / 4.0
 printf("%f\n", x); // 输出 1.500000
 return 0;
}


上⾯⽰例中, 6.0 / 4 表⽰进⾏浮点数除法,得到的结果就是 1.5 。

再看⼀个例⼦:


#include <stdio.h>
int main()
{
 int score = 5;
 score = (score / 20) * 100;
 return 0;
}


上⾯的代码,你可能觉得经过运算, score 会等于 25 ,但是实际上 score 等于 0 。这是因为

score / 20 是整除,会得到⼀个整数值 0 ,所以乘以 100 后得到的也是 0 。

为了得到预想的结果,可以将除数 20 改成 20.0 ,让整除变成浮点数除法。

%

运算符 % 表⽰求模运算,即返回两个整数相除的余值。这个运算符只能⽤于整数,不能⽤于浮点数。


相关文章
|
4月前
C语关系和逻辑操作符
C语关系和逻辑操作符
64 5
|
4月前
|
容器
OOP 中的组合、聚合和关联
【8月更文挑战第22天】
65 0
|
7月前
|
C++
【C++】istream类型对象转换为逻辑条件判断值
【C++】istream类型对象转换为逻辑条件判断值
【C++】istream类型对象转换为逻辑条件判断值
|
7月前
|
C语言
逻辑操作符
条件操作符(三目操作符)是C语言中唯一的三元运算符,形式为:表达式1 ? 表达式2 : 表达式3。如果表达式1为真,执行并返回表达式2的结果;否则,执行并返回表达式3的结果。示例和练习展示了如何使用此操作符来比较和输出两个数中的较大值。
44 1
|
6月前
|
Dart
Dart之运算符(算数、关系、逻辑、赋值、条件)
Dart之运算符(算数、关系、逻辑、赋值、条件)
|
7月前
|
C#
C#动态查询:巧用Expression组合多条件表达式
在C#中,利用`Expression`类和`AndAlso`、`OrElse`方法,可以组合两个`Expression&lt;Func&lt;T, bool&gt;&gt;`以实现动态多条件查询。该方法通过构建表达式树,方便地构建复杂查询。示例代码展示了如何创建表达式树,分别检查年龄大于等于18和姓名为&quot;John&quot;的条件,并使用`AndAlso`组合这两个条件,最终编译为可执行的委托进行测试。
319 1
|
7月前
|
C语言
条件操作符
条件操作符(三目操作符)是C语言中的唯一一个三元运算符,形式为:`表达式1 ? 表达式2 : 表达式3`。如果`表达式1`为真,执行`表达式2`并返回结果;否则执行`表达式3`并返回结果。例子展示了如何用条件操作符输出两个数中的较大值。
39 1
|
7月前
关系操作符
这篇内容介绍了比较运算符,包括大于`&gt;`、小于`&lt;`、等于`==`、大于等于`&gt;=`、小于等于`&lt;=`和不等于`!=`。同时强调不应连续使用多个关系操作符。
33 0
|
7月前
|
C++
c++逻辑和杂项运算符
c++逻辑和杂项运算符
51 0
|
7月前
|
Java
基本概念【算术、 关系、逻辑、位、字符串、条件、优先级等运算符】(三)-全面详解(学习总结---从入门到深化)
基本概念【算术、 关系、逻辑、位、字符串、条件、优先级等运算符】(三)-全面详解(学习总结---从入门到深化)
76 0