C语言操作符

本文讲述了编程中易混淆的=和==的区别,以及逻辑运算符&&和||的短路现象,通过示例说明如何避免逻辑错误,特别是当使用三目操作符时。
摘要由CSDN通过智能技术生成

1.关于==和=容易弄混淆。

==在计算机语言中表示的是等于,=在计算机中表达的是赋值。

若将==写成了=,则会导致逻辑错误,如下面的代码

int n = 0;
while (n = 1)//若n等于1,则在屏幕上显示yes
{
 printf("yes!\n");
}

return 0;

可以看到,这个代码要实现的是判断n是否为1,若是打印yes,但是却出现了以下的现象

按照我们的逻辑,应该是不进入循环,main函数直接返回0,可是屏幕上却打印了yes,这是因为在=为赋值,循环判断条件中,1放进了n中,n由0变成了1,且在这之后均不断地被赋值为1,条件为永真,进入死循环。

由于编译器只解决语法错误,所以在上述情况下,编译器不会报错,当我们错写的时候,检查此项错误就不那么方便,为解决这一问题,我们可以这样写代码

int n = 0;
while (1 = n)
{
 printf("yes!\n");
}

return 0;

这样编译器就会报错了

这样就方便我们查找此类错误了

改为这样,就符合我们的逻辑了

int n = 0;
while (1 == n)
{
 printf("yes!\n");
}

return 0;

2.逻辑与(&&)或(||)的短路现象

运用 && 和 || 的时候,从左到右依次计算;&&操作符若左边的已经为假,则右边的表达式不执行,直接返回整个表达式的结果,以下面的代码为例

#include <stdio.h>//由于要运用到输出函数printf,所以要包含头文件
int main()
{
  int a = 0, b = 0, c = 4;
  int x = 0, y = 0;
  int n = (x = a + b) && (y = b + c);//代码中所有的标点符号均要采用英文,否则会编译器会报错,无法运行程序
  printf("x = %d y = %d n = %d", x, y, n);// n 用来放整个表达式的结果,逻辑运算与或非返回的值为1(真)或0(假)
  return 0;//main函数运行结束后返回一个整型的值0,若该行代码正常结束则返回0
}

上面的结果,按照我们的逻辑应该是 x = 0, y = 4; 但是结果却是这样的

这是因为代码在执行的时候,从左到右依次计算,先将 a + b 的结果放入变量 x 中,左边的表达式为 0(假),则表达式 (x = a + b) && (y = b + c)就直接返回结果为0(假),放入变量n中。

同样的,|| 若左边的表达式为真,|| 右边的表达式不执行,直接返回结果,即1(真)

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

在该代码中,当左边的表达式为真(1)的情况下,整个表达式直接返回真(1),右边的表达式不执行,结果如下

变量 x 应该被 a + b的结果赋值,即 x = 1,但代码执行的结果却为 0 ,证明右边的表达式并没有执行,x 才会保持初值不发生改变。

综上,我们可以总结出,当运算符&&左边的表达式为假时,出现短路现象;而运算符 || 则相反左边表达式为假,出现短路现象。(&&找假,||找真)

3.三目操作符是可以接收三个操作对象,如“?:”

int x = 0, y = 4;//建立两个变量,分别存放 0 和 4 
printf("%d", (x > y ? x : y));//该表达式表示当 x > y 表达式成立,则返回 x ,否则返回 y

在该代码中,x > y 、x 、y 分别是一个操作对象。

同样的,双目操作符(+、-、*(乘)、/(除)、>=、<=、==、>、<等)有两个操作对象,单目操作符(++、--、&(取地址符)等)有一个操作对象。

  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值