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

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

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 ,让整除变成浮点数除法。

%

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


相关文章
|
搜索推荐 UED 索引
SEO中的TDK是什么
SEO中的TDK是什么
574 0
使用pip时报错:No module named ‘chardet‘ 的解决办法
使用pip时报错:No module named ‘chardet‘ 的解决办法
2413 0
使用pip时报错:No module named ‘chardet‘ 的解决办法
|
弹性计算 JavaScript 应用服务中间件
在一台ECS服务器上优雅部署多环境:实践攻略
在ECS上部署多环境应用,通过Nginx反向代理实现。规划端口或子域名区分开发、测试和生产环境。配置应用监听不同端口,如Node.js应用修改启动脚本。【6月更文挑战第21天】
538 3
|
机器学习/深度学习 语音技术 开发工具
【独家秘籍】揭秘!如何用阿里云TTS魔法般将文字瞬间变成天籁之音,让你的作品开口说话,震撼人心!
【8月更文挑战第15天】通过阿里云语音合成服务(TTS),开发者可将文本转为自然语音,适用于有声阅读、客服等场景。首先注册并获取AccessKey ID/Secret,然后安装阿里云Python SDK。使用示例代码设置语音参数(如发音人xiaoyun、引擎wavenet),发送请求并保存生成的MP3文件。注意正确认证及异常处理,以确保应用稳定可靠。
939 0
|
JSON Java 测试技术
Jmeter接口压测示例
Jmeter接口压测示例
554 0
|
存储 缓存 测试技术
golang slice相关常见的性能优化手段
【10月更文挑战第23天】本文介绍了 Go 语言中切片使用的四个优化技巧:预分配容量、减少中间切片的创建、利用切片的复用特性和合理使用 `copy` 函数。通过这些方法,可以有效提高程序性能,减少不必要的内存分配和数据复制操作。每个技巧都附有详细的原理说明和代码示例,帮助开发者更好地理解和应用。
262 2
|
消息中间件 SQL 分布式计算
大数据-62 Kafka 高级特性 主题 kafka-topics相关操作参数 KafkaAdminClient 偏移量管理
大数据-62 Kafka 高级特性 主题 kafka-topics相关操作参数 KafkaAdminClient 偏移量管理
218 6
|
数据采集 安全 API
数据治理:实现原始数据不出域,确保数据可用不可见的创新策略
在数字化时代,数据成为企业宝贵资产,驱动业务决策与创新。然而,数据量激增和流通频繁带来了安全和管理挑战。“原始数据不出域,数据可用不可见”的治理理念应运而生,通过数据脱敏、沙箱技术和安全多方计算等手段,确保数据安全共享与高效利用。这一理念已广泛应用于金融、医疗等行业,提升了数据价值和企业竞争力。
2124 0
|
SQL 数据采集 存储
"揭秘SQL Server中REPLACE函数的神奇力量!一键替换字符串,解锁数据处理的无限可能,你还在等什么?"
【8月更文挑战第20天】SQL Server 的 REPLACE 函数是处理字符串的强大工具,用于在查询中替换字符串的部分内容。基本语法为 `REPLACE(string_expression, string_pattern, string_replacement)`。例如,可将员工邮箱从 `@example.com` 替换为 `@newdomain.com`。支持多级嵌套替换与变量结合使用,适用于动态生成查询。注意大小写敏感性及全局替换特性。掌握 REPLACE 函数能有效提升数据处理能力。
735 0
下一篇
oss云网关配置