【C语言初阶】带你轻松玩转所有常用操作符(3)——关系操作符,逻辑操作符,条件操作符,逗号表达式

简介: 【C语言初阶】带你轻松玩转所有常用操作符(3)——关系操作符,逻辑操作符,条件操作符,逗号表达式
  • 在正式开始之前,我们还是借助一张思维导图帮助大致简单回忆一下有关操作符的基础内容

  • 今天咱们接着单目操作符后朝下讲

一.关系操作符

>
>=
<
<=
!=  用于测试“不相等”
==    用于测试“相等”

这些关系运算符比较简单,没什么可讲的,但是我们要注意一些运算符使用时候的陷阱。

比如下面的代码:

#include<stdio.h>
//判断并在屏幕上打印闰年
int main()
{
  int y = 0;
  scanf("%d", &y);
  //1. 能被4整除,并且不能被100整除
  //2. 能被400整除是闰年
  if (((y % 4 = 0) && (y % 100 != 0)) || (y % 400 == 0))
  {
    printf("闰年\n");
  }
  else
  {
    printf("不是闰年\n");
  }
  return 0;
}

我们这段代码中,想要判断的是输入的年数是否能被4整除,但是注意这里:

if (((y % 4 = 0) && (y % 100 != 0)) || (y % 400 == 0))

我们在这里由于不小心把”y%4==“0写成了把0的值赋给y%4,此时程序连编译器都过不去。

55041cc37da7428bb8f058643621db05.png

警告:


在编程的过程中== 和=不小心写错,导致的错误

良好的代码风格

注意,在某些情况下,类似“==”和“=”用错时,编译器是不会报错的。

int main()
{
  int x = 0;
  if (x = 1)
  {
    printf("HEHE\n");
  }
  else
    printf("haha\n");
  return 0;
}

c8a446a91feb4f38bc2f4bc32e69f802.png


我们这里x初始化的值是0,应该打印“haha”,但是由于我们错误的将“==”写成“=”,

所以导致错误的打印“HEHE”,编译器此时并没有报错,因为从逻辑上来说这段代码并没有错,那此时我们怎样修改代码能使编译器提醒我们此时代码存在错误呢?

int main()
{
  int x = 0;
  if (1=x)
  {
    printf("HEHE\n");
  }
  else
    printf("haha\n");
  return 0;
}

ce437c11819b43c6b29537ab51c0344f.png

我们可以调换左右数的位置,由于我们不可能把一个变量的值赋给一个常量,因此我们就可以通过这样的方式来提醒我们代码是否有误

正确的代码

int main()
{
  int x = 0;
  if (1==x)
  {
    printf("HEHE\n");
  }
  else
    printf("haha\n");
  return 0;
}

595956e62a6e492e898efd6c76bc8600.png

像上述这种只需要通过简单的修改就能帮助我们找到代码中可能出现的bug无疑就是良好的代码风格!!

二.逻辑操作符

逻辑操作符有哪些:

&&   逻辑与
||   逻辑或

区分逻辑与和按位与

区分逻辑或和按位或

1&2----->0//按位与作用与二进制补码,对应二进制位数都为1才为1,否则为0
1&&2---->1//一般作用于两边的条件,当两边的条件都i为真时才为真,否则为假
1|2----->3//按位或也是作用于二进制补码,对应二进制位数只要有一个为1就为1,只有两个同时为0才为0
1||2---->1//逻辑与两边条件只要有一个为真就为真,只有都为假才是假

关于按位与,按位或等的位操作符知识我在第一篇操作符详解中已经讲过了,感兴趣的可以看看以下链接:

【C语言初阶】带你轻松玩转所有常用操作符(1) ——算数操作符,移位操作符,位操作符

逻辑操作符应用面试题实例

下面举一道大厂的相关面试题来加深大家对逻辑操作符的印象。

代码如下:

#include <stdio.h>
int main()
{
  int i = 0,a=0,b=2,c =3,d=4;
  i = a++ && ++b && d++;
  printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
  return 0;
  }

试判断一下上述程序运行起来的结果:

0646faf7e3f942ffb338b16d46bdd687.png

为什么?

们说了,逻辑与只要有一个条件不满足条件,则为假,此时当程序运行到a++时,由于是后置++,a此时等于0,等于0就是为假的意思,该行代码不再朝下继续运行下去直接停止,此时只有a后置加了个1,bcd的值则不变,因此出现上述打印的结果。

那代码如果是这样呢?

#include <stdio.h>
int main()
{
  int i = 0,a=0,b=2,c =3,d=4;
   i = a++||++b||d++;
  printf("a = %d\n b = %d\n c = %d\n d = %d\n", a, b, c, d);
  return 0;
  }

这段代码的结果又是如何呢?


76cae6d0f74140918ef35b339ca4b45d.png

这又是为啥?


我们知道,逻辑或是只要||两边有一个条件满足则为真,我们带入此时a=0;此时后置++,传入的依旧是0为假,逻辑或继续朝下运行,前置++b,此时b=3,为真,逻辑或就不再朝下运行了,此时只有a和b的值加了1其余则为原数,因此打印的是屏幕上的结果。


通过上述两个面试题的例子,我相信你对逻辑操作符应该有了你自己的见解,那我们继续朝下学习。


三.条件操作符

exp1 ? exp2 : exp3//判断表达式1真假,条件如果为真,则执行表达式2,如果为假,则执行表达式3

因此上面的代码用if也可以实现

    if(exp1)
    exp2;
    else
    exp3;

举个简单的代码例子吧

int main()
{
  int a = 0;
  int b = 0;
  if (a > 5)
    b = 3;
  else
    b = -3;
  return 0;
}

用条件操作符实现;

int main()
{
   int a=0;
   int b=0;
//(a > 5) ? (b = 3) : (b = -3);
  b = ((a > 5) ? (3) : (-3));//与上一行代码两者等价
  return 0;
}

逗号表达式

exp1, exp2, exp3, …expN

逗号表达式,就是用逗号隔开的多个表达式。

逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。

举几个示例代码

int main()
{
   //代码1
  int a = 1;
  int b = 2;
  int c = (a > b, a = b + 10, a, b = a + 1);//逗号表达式
  printf("%d\n", a);
  printf("%d\n", b);
  printf("%d\n", c);
  //代码2
   //if (a = b + 1, c = a / 2, d > 0)
   //代码3
  //a = get_val();
  //count_val(a);
  //while (a > 0)
  //{
  //  
  //    //业务处理
  //    a = get_val();
  //  count_val(a);
  //}
  //如果使用逗号表达式,改写:
  //while (a = get_val(), count_val(a), a > 0)
  return 0;
}

如果你对上述代码的理解有问题,不妨自己试着去运行一下哦!,这里就不细讲了。

总结

今天的内容暂时到这里就结束了,我们今天讲了有关 关系操作符,逻辑操作符,条件操作符以及逗号表达式的应用以及易错点。如果你还有所困惑不妨自己动手实操一下,这方面的知识是需要记忆的,咱们必须反复的练习才能熟悉起来!

以上就是关于操作符的第三部分内容,后面其他的操作符应用详解会在近期分批次更新,敬请期待!!

好了,如果你有任何疑问欢迎在评论区或者私信我提出,大家下次再见啦!

新人博主创作不易,如果感觉文章内容对你有所帮助的话不妨三连一下这个新人博主再走呗。你们的支持就是我更新的动力!!!


**(可莉请求你们三连支持一下博主!!!点击下方评论点赞收藏帮帮可莉吧)**


20fa3306e76244de9879742c165c792a.gif


目录
相关文章
|
12天前
|
C语言
C语言操作符(补充+面试)
C语言操作符(补充+面试)
23 6
|
8天前
|
存储 编译器 C语言
十一:《初学C语言》— 操作符详解(上)
【8月更文挑战第12天】本篇文章讲解了二进制与非二进制的转换;原码反码和补码;移位操作符及位操作符,并附上多个教学代码及代码练习示例
19 0
十一:《初学C语言》—  操作符详解(上)
|
1天前
|
存储 C语言 索引
【C语言篇】操作符详解(下篇)
如果某个操作数的类型在上⾯这个列表中排名靠后,那么⾸先要转换为另外⼀个操作数的类型后执⾏运算。
|
1天前
|
程序员 编译器 C语言
【C语言篇】操作符详解(上篇)
这是合法表达式,不会报错,但是通常达不到想要的结果, 即不是保证变量 j 的值在 i 和 k 之间。因为关系运算符是从左到右计算,所以实际执⾏的是下⾯的表达式。
|
1月前
|
C语言
五:《初学C语言》— 操作符
本篇文章主要讲解了关系操作符和逻辑操作符并附上了多个代码示例
30 1
五:《初学C语言》—  操作符
|
1月前
|
编译器 C语言
【C语言初阶】指针篇—下
【C语言初阶】指针篇—下
|
1月前
|
存储 C语言
【C语言初阶】指针篇—上
【C语言初阶】指针篇—上
|
C语言
c语言中逗号运算符和逗号表达式
原文:c语言中逗号运算符和逗号表达式  C语言提供一种特殊的运算符——逗号运算符。用它将两个表达式连接起来。如:  3+5,6+8称为逗号表达式,又称为“顺序求值运算符”。逗号表达式的一般形式为         表达式1,表达式2逗号表达式的求解过程是:先求解表达式1,再求解表达式2。
1159 0
|
6天前
|
存储 C语言
【C语言函数】static和extern关键字修饰
【C语言函数】static和extern关键字修饰
|
1天前
|
编译器 程序员 C语言
【C语言篇】从零带你全面了解函数(包括隐式声明等)(下篇)
⼀般情况下,企业中我们写代码时候,代码可能⽐较多,不会将所有的代码都放在⼀个⽂件中;我们往往会根据程序的功能,将代码拆分放在多个⽂件中。