c语言题目 b=3 ; b=(++b)+(++b)+(++b); 输出最终b=? 答案是16 具体怎么算的?我怎么算到...
5个回答
展开全部
计算b=(++b)+(++b)+(++b);时
第一步:计算第一个(++b)这点谁都不会错;此时b=4;
第二步:计算第二个(++b)这点也没有问题吧,此时b=5;
第三步:计算(++b)+(++b)将5代入,(++b)+(++b)=10;这点容易想不通,为什么不是5+4呢?因为变量只有一个存储单元,中间结果被覆盖掉了。
第四步:之后的运算应该不是问题了吧……
程序是先运行了b=(++b)+(++b);这儿等号赋值语句执行前,a已经完成了两次自加a的值为5,所以加了之后b=10;然后b=b+(++b);b自加变成6,所以b=10+6=16;
若有帮助
望采纳!
第一步:计算第一个(++b)这点谁都不会错;此时b=4;
第二步:计算第二个(++b)这点也没有问题吧,此时b=5;
第三步:计算(++b)+(++b)将5代入,(++b)+(++b)=10;这点容易想不通,为什么不是5+4呢?因为变量只有一个存储单元,中间结果被覆盖掉了。
第四步:之后的运算应该不是问题了吧……
程序是先运行了b=(++b)+(++b);这儿等号赋值语句执行前,a已经完成了两次自加a的值为5,所以加了之后b=10;然后b=b+(++b);b自加变成6,所以b=10+6=16;
若有帮助
望采纳!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个是运算堆栈的问题导致的。
首先计算机会按照运算符号从左往右开始压栈。(也就是那两个加号)
第一个+进栈,随后和它相关的两个数字也会进栈。((++b)(++b)),这样就会有+
(++b)(++b)的堆栈结果。也就是“+”“5”“5”的堆栈结果。然后第二个+进栈,变量进栈。+“6”。
所以上边的式子在计算机中运行的时候是:
5+5+6。所以才会有16的结果。
首先计算机会按照运算符号从左往右开始压栈。(也就是那两个加号)
第一个+进栈,随后和它相关的两个数字也会进栈。((++b)(++b)),这样就会有+
(++b)(++b)的堆栈结果。也就是“+”“5”“5”的堆栈结果。然后第二个+进栈,变量进栈。+“6”。
所以上边的式子在计算机中运行的时候是:
5+5+6。所以才会有16的结果。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
a=a+++b+++c;
到了这里
实际上根据优先级就是
a
=
(a++)
+
(b++)
+
c
a++
的值是1,
a的值变成了2
b++
的值是1,
b的值变成了2
c
还是1
然后吧等式的结果赋给a,
所以a
就是3了
执行完代码的结果就是
a
=
3
b
=
2
c
=
1
到了这里
实际上根据优先级就是
a
=
(a++)
+
(b++)
+
c
a++
的值是1,
a的值变成了2
b++
的值是1,
b的值变成了2
c
还是1
然后吧等式的结果赋给a,
所以a
就是3了
执行完代码的结果就是
a
=
3
b
=
2
c
=
1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我觉得计算结果应该为18才对啊
首先,b初始值为3,三个前加后为6,6+6+6
=
18
编译器运行后的结果也是18
注意一点,前加的优先级高于加号
首先,b初始值为3,三个前加后为6,6+6+6
=
18
编译器运行后的结果也是18
注意一点,前加的优先级高于加号
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询