惧留孙网

juliusun.com

在线教程 > C语言教程 > 运算符应用加强

运算符应用加强

第 17/50 节 冥河C语言教程


C语言很多语句需要判断表达式值真假,如if判断语句、选择运算符? :、while或是for等循环语句等都需要计算判断表达式值真假,然后对程序执行产生影响。

事实上C语言中,任何表达式的结果都是数字,判断及循环中,数字0值为假,非0值全部为真

比较运算符==、!=,关系运算符<、<=、>、>=,逻辑运算符&&、||,等等,表达式成立时返回1,不成立时返回0。

虽然上述运算符成立时返回1,但是并不是只有数字1代表真,非0全部代表真,如2、3、1000也代表真。但是运算符不能返回多个数,就返回1作为真。

例:


  1. printf("%d %d",3>2,3<2); //关系表达式成立返回1,不成立返回0。输出结果为1 0
  2. printf("%d", 2 && 5); //非0为真,2&&5 => 真&&真 => 真 => 1,输出1

判断语句、循环语句等判断真假时,以非0为真,0为假。如:


  1. if( 1 ) //非0数字1为真,所以if判断的表达式成立
  2. {
  3. printf("1为真"); //此条语句会执行
  4. }
  5. else
  6. {
  7. printf("1为假"); //此条语句不会执行
  8. }

既然0为假,非0为真,那么条件"表达式!=0"或"0!=表达式"可以直接写成"表达式",两者的意义都是表达式结果不为0。如:


  1. int i = 10;
  2. while( i ) //0为假,非0为真。相当于while(i != 0)
  3. {
  4. printf("i为%d循环条件成立\n",i);
  5. --i; //使i自减1,防止死循环
  6. }

简洁起见,以后的代码,"表达式!=0"或"0!=表达式"本教程尽量直接写成"表达式",如if(i !=0)尽量写成if(i)。写法更加简洁,同时更提醒学习者,真假本质也是数字。

比较运算符如!=或==使用时,尽量把常量写在前面,变量写在后面。如if(i == 0)尽量写成if(0 == i)。因为多数初学者经常把==写成=,==是比较运算符,=是赋值运算符。当把常量写在前面如if(0 == i)时,当把==写成=时,编译器会报错,提醒学习者。如if(0 == i)写成if(0=i)地出错,原因是0是常量,不能再赋值。而if(i = 0)不会报错,是正确的语法。为什么可以在判断语句里写赋值语句,下一段详细讲。

任何运算符都有返回值,赋值运算符=也是。赋值运算符在将变量赋值后,返回值为赋给变量的值,如i = 9的返回值就是9,i=3+2返回值为5。所以if(i = 0)相当于if(0),是正确的C语言语法。

逻辑运算符&&、||需要说明的是,当表达式某一项已经决定了逻辑表达式值时,逻辑运算符将停止执行以后的表达式。如0 && (3>2),当0已经为假,&&两边有一方为假,整个表达式值即为假,已经没有必要计算3>2了。因此像if(0 && (i = 8))此类表达式执行时,0已经是假了,那么i=8赋值语句就不会执行了,从而可能导致变量i没有执行赋值成功,这方面初学者一定要注意。

同样,||当左边的表达式为真时,右边的表达式已经不会影响逻辑表达式结果了,右边的表达式同样不会执行。如1 || i=0,1为真,则整个表示式为真,i=0赋值语句不会执行。

例:


  1. int i = 1,j = 0;
  2. if( j && (i = 2)) //j为0为假,那么表达式i=2就不会执行,i仍然是1
  3. printf("j && (i = 2)");
  4. printf("%d",i); //输出1

再介绍一个运算符,逗号运算符‘,’,逗号运算符用法是:多个表达式用逗号隔开,运行时表达式从左到右执行,最后整个表达式返回最右边表达式的值。如表达式:


  1. i = (a=1,b-2,c=b+1);

执行过程是先执行a=1,将a赋值为1,b=2将,b赋值为2,执行到c=b+1时b=2已经执行完毕了,b值为2,所以c=b+1为3,然后整个表达式返回3赋值给变量i。本例将逗号运算符加上括号,是因为逗号运算符优先级低,如果不加括号相当于(i=(a=1)),b-2,c=b+1,此时i值为a=1的结果,不是我们需要的值。

逗号运算符用于函数参数时一定要加上括号。因为函数参数也是用逗号分隔,如果逗号运算符不加括号,会引起歧义,导致编译错误。

作者:冥河 QQ:3304576112
交流QQ群:554701039 C语言讲课群
本教程内容由本站保留版权,请勿复制传播
抖音
©2015-2024 惧留孙网 juliusun.com

京ICP备15039193号-1

首页 教程 下载 文章 聊天 我的