c语言问题 ++的问题
i=2k=(++i)+(++i)+(++i);这个k我觉得应该等于自右向左5+4+3=12但是结果是13#include<stdio.h>voidmain(){inti=...
i=2
k =(++i)+(++i)+(++i);
这个k我觉得应该等于
自右向左 5+4+3=12
但是结果是13
#include <stdio.h>
void main(){
int i = 2,k;
k =(++i)+(++i); //这个怎么输出是8
printf("%d",k);
} 展开
k =(++i)+(++i)+(++i);
这个k我觉得应该等于
自右向左 5+4+3=12
但是结果是13
#include <stdio.h>
void main(){
int i = 2,k;
k =(++i)+(++i); //这个怎么输出是8
printf("%d",k);
} 展开
展开全部
我分析的结果是
这个++ -- 如果有多条语句的话 是先算前面2个的
这个不是你说的那样自右像左
是从左像右边;;;那个++才是自右像做,,,不过运算的时候是 + - 这个是自左像右
k=(++i)+(++i)+(++i) ; 这个等价于k=[(++i)+(++i)]+(++i) 先算前面2个 =4+4+5
k=(--i)+(--i)+(--i) ; 这个等价于k=[(--i)+(--i)]+(--i) 先算前面2个 =0+0-1
k=(++i)+(--i)+(++i) ;这个和上面同理 2+2+3=7
还有就是更多语句 也同理。。我也举例几个
k=(++i)+(++i)+(++i)+(++i)+(++i) ; 结果=4+4+5+6+7=26
k=(--i)+(--i)+(--i)+(--i)+(--i) ;结果= 0+0-1-2-3-6
k=(++i)+(--i)+(++i)+(++i)+(++i) ;结果=2+2+3+4+5=16
每个我都编译过 vc++下面
这个++ -- 如果有多条语句的话 是先算前面2个的
这个不是你说的那样自右像左
是从左像右边;;;那个++才是自右像做,,,不过运算的时候是 + - 这个是自左像右
k=(++i)+(++i)+(++i) ; 这个等价于k=[(++i)+(++i)]+(++i) 先算前面2个 =4+4+5
k=(--i)+(--i)+(--i) ; 这个等价于k=[(--i)+(--i)]+(--i) 先算前面2个 =0+0-1
k=(++i)+(--i)+(++i) ;这个和上面同理 2+2+3=7
还有就是更多语句 也同理。。我也举例几个
k=(++i)+(++i)+(++i)+(++i)+(++i) ; 结果=4+4+5+6+7=26
k=(--i)+(--i)+(--i)+(--i)+(--i) ;结果= 0+0-1-2-3-6
k=(++i)+(--i)+(++i)+(++i)+(++i) ;结果=2+2+3+4+5=16
每个我都编译过 vc++下面
展开全部
一般这种语句没什么意思,不同的编译环境可能不同
但是我试验过,在tc,win-tc,vc中,所有的结果都如
k =(++i)+(++i); //这个怎么输出是8
这个一样,是++完后,在统一+
也就是说,当i是2的时候,完成(++i)+(++i)这个的时候,i变成4,再统一加,结果是4+4
这种语句最好不要写,也就是蛋疼的老湿出题的时候能写这样的语句
一般程序不会出现这样的语句,在编写程序的时候,也要尽量避免这样的语句,没什么意思
但是我试验过,在tc,win-tc,vc中,所有的结果都如
k =(++i)+(++i); //这个怎么输出是8
这个一样,是++完后,在统一+
也就是说,当i是2的时候,完成(++i)+(++i)这个的时候,i变成4,再统一加,结果是4+4
这种语句最好不要写,也就是蛋疼的老湿出题的时候能写这样的语句
一般程序不会出现这样的语句,在编写程序的时候,也要尽量避免这样的语句,没什么意思
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看反汇编= =
k =(++i)+(++i)+(++i); 不是你看的那样,看编译器反汇编后的实际步骤是:
++i;//i=3
++i;/i=4
k=i+i;//k=4+4=8
++i;//i=5
k=i+k;//k=5+8=13
对于三位(++i)+(++i)+(++i);会分解为两步[(++i)+(++i)]+(++i),而(++i)+(++i)的过程是先把算式两边的++符号运算后再执行加法,因为C的优先级++的优先级比+高
如果你懂汇编的话,最好自己看下,= =我原来也不会这种问题,看下就明白了
k =(++i)+(++i)+(++i); 不是你看的那样,看编译器反汇编后的实际步骤是:
++i;//i=3
++i;/i=4
k=i+i;//k=4+4=8
++i;//i=5
k=i+k;//k=5+8=13
对于三位(++i)+(++i)+(++i);会分解为两步[(++i)+(++i)]+(++i),而(++i)+(++i)的过程是先把算式两边的++符号运算后再执行加法,因为C的优先级++的优先级比+高
如果你懂汇编的话,最好自己看下,= =我原来也不会这种问题,看下就明白了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
k =(++i)+(++i)+(++i);
相当于四句语句:
++i;
++i;
++i;
k=i+i+i;
k =(++i)+(++i); 这句同理,
关键就在:
++i先让i自增1,再使用自增1后的i
i++先使用原始的i值,再让i自增1
相当于四句语句:
++i;
++i;
++i;
k=i+i+i;
k =(++i)+(++i); 这句同理,
关键就在:
++i先让i自增1,再使用自增1后的i
i++先使用原始的i值,再让i自增1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一个 应该是4+4+5
第二个 是4+4;
由于i对应的是同一个内存空间,前++是先计算,++i + ++i先i自加两次i为4,在4+4
第二个 是4+4;
由于i对应的是同一个内存空间,前++是先计算,++i + ++i先i自加两次i为4,在4+4
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个和程序编译软件有关。VC++6.0和Turbo C运行出来的结果可能就不一样。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询