注册 登录
编程论坛 C语言论坛

运算级后问题。

花脸 发布于 2017-03-22 20:52, 533 次点击
#include<stdio.h>
int main()
{
    int a=-1,b=4,k;
    k=(++a<0)&&!(b--<=0);//  这一步(++a<0)&&!(b--<=0) 是怎么执行的??
    printf("%d\n%d\n%d\n",a,b,k);
    return 0;
 }
 //还有一个
b=1;
a=b++  //结果是a=1,不应该a=b之后再加一,结果等于2吗?
a=++b  //结果 a=2;
9 回复
#2
吹水佬2017-03-22 21:11
int a=-1,b=4,k;
k=(++a<0)&&!(b--<=0);
相当于:
++a;
k=(a<0);
if (k) k=!(b--<=0);
因k==0, k=!(b--<=0)没执行。

a=b++;
相当于:
a=b;
b++;

a=++b;
相当于:
++b;
a=b;
#3
花脸2017-03-22 21:29
a=b++;执行后是 a=1.b=2?
++a;
++a;
k=(a<0);
if (k) k=!(b--<=0);   这为什么是if语句?
因k==0, k=!(b--<=0)没执行。  
#4
吹水佬2017-03-22 23:09
以下是引用花脸在2017-3-22 21:29:53的发言:

a=b++;执行后是 a=1.b=2?...执行过程是b=1;a=b;b++;结果不是a=1,b=2吗?
++a;
++a;
k=(a<0);
if (k) k=!(b--<=0);   这为什么是if语句?...k就是(++a<0),如果(++a<0)==0就不会再去理!(b--<=0)的。
因k==0, k=!(b--<=0)没执行。  

#5
花脸2017-03-23 20:39
回复 4楼 吹水佬
???
#6
吹水佬2017-03-23 20:53
以下是引用花脸在2017-3-23 20:39:58的发言:

???

还有问题?
其实把复杂的语句变换成简单的语句较好理解点就是了。
#7
吹水佬2017-03-23 20:53
以下是引用花脸在2017-3-23 20:39:58的发言:

???

还有问题?
其实把复杂的语句变换成简单的语句较好理解点就是了。
#8
花脸2017-03-23 21:30
回复 7楼 吹水佬
不是赋值运算的优先级比算数运算低吗?不应该是先执行b++再执行a=b吗?
#9
吹水佬2017-03-24 07:04
以下是引用花脸在2017-3-23 21:30:25的发言:

不是赋值运算的优先级比算数运算低吗?不应该是先执行b++再执行a=b吗?

这个是b自身的问题,好象与操作符优先级无关。
a=b++;这句里的b++表达的是先将b先赋给a后再是b自身++,就算写成a=(b++);结果也一样。
a=++b;这句里的++b表达的是先将b自身++后再赋给a。
#10
花脸2017-03-26 17:49
回复 9楼 吹水佬
恩  好吧 谢谢你。
1