浙大pta《c语言基础》经典例题-创新互联

一.6.4:表达式的解析

1.表达式 !x 等价于:

创新互联公司专注于企业网络营销推广、网站重做改版、顺河网站定制设计、自适应品牌网站建设、HTML5建站电子商务商城网站建设、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为顺河等各大城市提供网站开发制作服务。

 x==0

分析:

xx==0!x
非000
011

从而可以看出x==0与!x的逻辑结果是等价的

2.表达式 !!6的值是:

 1

补充:逻辑量:a(非0)为真,!a=0;!!a=1

3.表达式 ~(~2<<1)的值是:

 5

 解析:2的二进制:10  ~2:01 ~2<<1(左移一位 一般相当于乘2)但这里没有超出机器字所表示     的位数其实是010,后取反,即得101,也就是5

 补充:正常进行移位运算时一般需要转换为2进制,且补足8位,如若前面不够全部添0

4.表达式 (z=0, (x=2)||(z=1),z) 的值是:

  0

补充:逗号表达式

一些特点
1、逗号表达式是C语言优先级最低的运算符。

2、逗号表达式是左结合性(即按从左到右顺序运算)的运算符。

常见表达式

//例一
#include
void main(){
 int x, y, z;
 o = x = 3, y = 4, z = 5;
 printf("x=%d,y=%d,z=%d,o=%d\n",x,y,z,o);
}
运行结果:x=3,y=4,z=5,o=3

//例二
#include
void main(){
 int x, y, z, o;
 o = ( x = 3, y = 4, z = 5 );
 printf("x=%d,y=%d,z=%d,o=%d\n",x,y,z,o);
}
运行结果:x=3,y=4,z=5,o=5

我们可以发现例一和例二中,变量o最终的结果是完全不同的。

我们可以先把上面两个表达式简化成👇

例一:o = 表达式1,表达式2,表达式3;

因为逗号表达式是优先级最低的表达式,赋值表达式的优先级高,所以会把表达式1的值直接赋值给o

例二:o = (表达式1,表达式2,表达式3);

括号里中的先执行,逗号表达式是左结合性,所以会从左往右依次执行,最后再把表达式3的值赋值给o

小结论:
结合以上两个例子的运行结果我们可以得出一个结论:

当没有括号时,第一个表达式为整个表达式的值。

而有括号时,依次执行后,最后一个表达式为整个表达式的值。

而且所有的表达式都依次执行了。

例题一
逗号表达式a=2*6,a*3,a+5的值为_____ 

逗号表达式的结果是整个表达式执行完后最后的一个值。

所以我们可以假定逗号表达式的结果为o

把这个式子看成o=(a=2*6,a*3,a+5)

a=2*6=12,此时表达式的值为12

a*3并不是一个赋值语句,此时表达式的值还是12

运算到这一步,可以看成o=(a+5)=12+5=17

该表达式的值为17

例题二
int a,表达式 (a=4*5,a+6),a++的值为_____

逗号表达式的结果是整个表达式执行完后最后的一个值。

所以我们可以假定逗号表达式的结果为o、

把这个式子看成o=((a=4*5,a+6),a++)

a=4*5=20,此时表达式的值为20

a+6并不是一个赋值语句,此时表达式的值还是20

a++是先赋值这条语句运算完后才会+1,直到这里,表达式的值为20

例题三
int a,表达式为(a=4*5,a+6),a++ 执行完后a的值为_____

这个例题是求a的值,而不是表达式的值,这里表达式2(也就是a++)中的a=a+1也是会执行的,所以a的值为21。

例题四
int x=5,y=8,z;

z=(x++,++y,x+y);

求z=_______

既然有括号,那就先依次执行前面的表达式,再把最后一个表达式赋值给z,

先执行x++,x=x+1=5+1=6

再执行y++,y=y+1=8+1=9

最后z=x+y=6+9=15

PS:如果这里的表达式三为x+++y,则要注意了!

z=(x++,++y,x+++y);

首先依次执行x++得x=6、++y得y=9

后置++的优先级大于前置++

所以这里是(x++)+y;而不是x+(++y);

(x++)+y这里先把x的值与y的值相加,随后x再自增加1

也就是z=x+y;x=x+1;

这里z的值还是15,但是x的值又加了1,x=7

————————————————
版权声明:本文为博主「DMWFJJ」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/DMWFJJ/article/details/122567247

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前题目:浙大pta《c语言基础》经典例题-创新互联
浏览地址:http://myzitong.com/article/docejd.html