您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
010第四章 分支结构程序01
发布时间:2021-04-10 16:18:05编辑:雪饮阅读()
左右值初探
左值是用来指明一个对象的表达式。最简单的左值就是变量名称。左值(lvalue)之所以称为“左”(以首字母为 L,代表 left),是因为一个左值表示一个对象,它可以出现在赋值运算符(assignment operator)的左边,例如“左表达式=右表达式”。
其他表达式(那些表示一个值但不指明一个对象的),被类似地称为右值(rvalue)。右值是可以出现在赋值运算符右边而不是左边的表达式。例如,常量和算术表达式。
运算符结合性与优先级实例1
#include <stdio.h>
#include <math.h>
void main(){
char c='k';
int i=1,j=2,k=3;
float x=3.0e+5,y=0.85;
/*
’a’+5<c :
+与<都是从左到右结合性 ascaii中十进制中a为97,k为107,推导得’a’+5<c==1
-i-2*j>=k+1:
>=从左到右结合性,
左边,-i-2*j=-5
右边,k+1=4
得-i-2*j>=k+1==flase==0
结果:1,0
*/
printf("%d,%d\n",'a'+5<c,-i-2*j>=k+1);
/*
1<j<5:
<结合性从左到右,得1<j<5==true==1
x-5.25<=x+y:
<结合性从左到右,得x-5.25<=x+y==true==1
结果:1,1
*/
printf("%d,%d\n",1<j<5,x-5.25<=x+y);
/*
i+j+k==-2*j:
==结合性从左到右,得6==-4推导得false==0
k==j==i+5:
==结合性从左到右,+优先级大于==优先级,得k==j==6推导得false==0
结果:0,0
*/
printf("%d,%d\n",i+j+k==-2*j,k==j==i+5);
}
运算符优先级与结合性实例2
#include <stdio.h>
#include <math.h>
void main(){
char c='k';
int i=1,j=2,k=3;
float x=3e+5,y=0.85;
/*
!x*!y:
!:逻辑非运算符号,优先级为2,结合性从右到左
*:取值运算符号,优先级等于!,后面跟上指针变量例如&a,&b之类的引用的(指针变量部分个人理解)
当已具有一个指针,并且希望获取它所引用的对象时,使用间接运算符 *(indirection operator),有时候这会被称为解引用运算符(dereferencing operator)。
*:乘法运算乘号,优先级3,结合性从左到右
那么优先级最高是!,则从左到右!x对于x不为0则取反就是0了即0*!y
那么由于y并非引用,所以这里相当于0乘以!y
得结果:0
!!!x:
!:逻辑非运算符号,优先级为2,结合性从右到左
得结果:0
*/
printf("%d,%d\n",!x*!y,!!!x);
/*
x||i&&j-3:
||:逻辑或,优先级12,结合性从左到右
&&:逻辑与,优先级11,结合性从左到右
-:减号,优先级4,结合性从左到右
-:负号,优先级1,结合性从右到左
这里-如果是负号,则相当于该表达式一分为2即x||i&&j与-3,毕竟负号优先级最高
但是这样以来两个表达式之间就没有什么联系了,j与-3之间总该有个操作符吧。
所以这里-不可能是负号,要理解为减号
所以进一步表达式为:x||i&&-1
然后是-1优先级》&&优先级》||优先级
所以1&&-1==ture==1推导得x||1推导得1
最后结果:1
i<j&&x<y:
<:小于运算符,优先级6,结合性从左到右
&&:逻辑与,优先级11,结合性从左到右
那么1&&x<y那么1&&0
最后结果:0
*/
printf("%d,%d\n",x||i&&j-3,i<j&&x<y);
/*
i==5&&c&&(j=8):
():括号,优先级1,结合性从左到右
==:等于,优先级7,结合性从左到右
&&:逻辑与,优先级11,结合性从左到右
=:赋值,优先级14,结合性从右到左
那么(j=8)肯定为true咯,赋值一般不会有失败的,特别是这种没有什么复杂逻辑的赋值
那么i==5&&c&&true,接下来==优先级大于&&,那么false&&c&&true
那么接下来&&结合性从左到右,那么false&&true,那么
最后的结果:0
x+y||i+j+k:
+:加号,优先级4,结合性从左到右
||:逻辑或,优先级12,结合性从左到右
那么1500000.85||6
最后结果:1
*/
printf("%d,%d\n",i==5&&c&&(j=8),x+y||i+j+k);
}
然后验证结果正好和我们推导的结果一致:
D:\>gcc hello.c -o h3
D:\>h3.exe
0,0
1,0
0,1
关键字词:c,运算符,结合性,优先级,左右值
上一篇:009第三章 顺序程序设计03
下一篇:011第四章 分支结构程序02