狂想曲丶 发表于 2020-10-28 19:04:09

运算顺序

int b=1;
float s;
s=b++*++b

求运算顺序解析

405794672 发表于 2020-10-28 19:10:04

可以VS调试单步。在这里我表示想象一下:
首先,b=b+1=2,上式写成:
s=b++*2(++和*哪个先我可不清楚啊,或许还是同级)
然后推出:
s=b*2=4,b=b+1=3.

狂想曲丶 发表于 2020-10-28 19:27:12

405794672 发表于 2020-10-28 19:10
可以VS调试单步。在这里我表示想象一下:
首先,b=b+1=2,上式写成:
s=b++*2(++和*哪个先我可不清楚啊, ...

为什么先算*的右半边啊?

405794672 发表于 2020-10-29 11:34:28

狂想曲丶 发表于 2020-10-28 19:27
为什么先算*的右半边啊?

++在未知数前面,那么这个未知数先自增1,再与其它的运算

狂想曲丶 发表于 2020-10-30 17:27:25

405794672 发表于 2020-10-29 11:34
++在未知数前面,那么这个未知数先自增1,再与其它的运算

所以不应该是s=1*3吗

405794672 发表于 2020-10-31 10:37:42

狂想曲丶 发表于 2020-10-30 17:27
所以不应该是s=1*3吗

这是怎么来的?
话说我那个方式求的答案究竟对不对,我不知道,我没有运行程序

大神本人 发表于 2020-10-31 18:27:02

楼主你确定这个表达式是对的吗

s = b++*++b

乐乐学编程 发表于 2020-11-1 00:14:42

s =4

狂想曲丶 发表于 2020-11-1 08:19:12

大神本人 发表于 2020-10-31 18:27
楼主你确定这个表达式是对的吗

s = b++*++b


课本上就是这样的

狂想曲丶 发表于 2020-11-1 08:26:37

405794672 发表于 2020-10-31 10:37
这是怎么来的?
话说我那个方式求的答案究竟对不对,我不知道,我没有运行程序

我的想法是b++后b=2,b++=1,后面的++b=3,
b=3
所以s=1*3=3

狂想曲丶 发表于 2020-11-1 08:28:00

405794672 发表于 2020-10-31 10:37
这是怎么来的?
话说我那个方式求的答案究竟对不对,我不知道,我没有运行程序

你求的答案是对的

405794672 发表于 2020-11-1 18:00:54

狂想曲丶 发表于 2020-11-1 08:26
我的想法是b++后b=2,b++=1,后面的++b=3,
b=3
所以s=1*3=3

是这样的,++是独立命令,*是另外的一个命令,互不干扰。++只对未知数自增1。
式子是用b运算,那么b的值是一样的,都是它怎么可能一个是1,一个是2?
首先,式子中有++b,++在前自然优先运行,它运行完后,b就=2了。然后就是s=b++*b
此时b=2.剩下这个式子,++在后,因此,它最后运算。于是先算s=b*b=2*2
然后最后一命令就是b++,此时b自己又增了。变成3了
这个式子实际就是s=b*b,只是掺杂了对b的自增命令,自增命令(++)它是独立的。并不是说s=++b或b++就是拿++b或b++后的结果来乘。
页: [1]
查看完整版本: 运算顺序