int i=10; i=i-----i*(i=-3)*i+++++i; printf( i=?); 其实这道题在不同的编译器下运算的结果不一样的,比如JS和C#以及JAVA运行后的结果是-63,在C++下运行的结果就变成了44,以上都是在window平台下VS2010运行的,

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/15 18:35:06
int i=10; i=i-----i*(i=-3)*i+++++i; printf( i=?); 其实这道题在不同的编译器下运算的结果不一样的,比如JS和C#以及JAVA运行后的结果是-63,在C++下运行的结果就变成了44,以上都是在window平台下VS2010运行的,

int i=10; i=i-----i*(i=-3)*i+++++i; printf( i=?); 其实这道题在不同的编译器下运算的结果不一样的,比如JS和C#以及JAVA运行后的结果是-63,在C++下运行的结果就变成了44,以上都是在window平台下VS2010运行的,
int i=10; i=i-----i*(i=-3)*i+++++i; printf( i=?);
其实这道题在不同的编译器下运算的结果不一样的,比如JS和C#以及JAVA运行后的结果是-63,在C++下运行的结果就变成了44,以上都是在window平台下VS2010运行的,而如果换到了linux下用GCC调试就变了22.这个题目除了考运算符优先级,更多的可能还需要编译器原理的知识吧.希望能给予解释,

int i=10; i=i-----i*(i=-3)*i+++++i; printf( i=?); 其实这道题在不同的编译器下运算的结果不一样的,比如JS和C#以及JAVA运行后的结果是-63,在C++下运行的结果就变成了44,以上都是在window平台下VS2010运行的,
这个题有错误,根据优先级,先算括号里的i=-3,接着算-3*i=6(因为前后都是*,根据结合性,自右向左),下一步就算i*6=36,然后就是负号运算符,得到-36,错误从这里开始,-36是一个表示式,对于自加自减运算符只能用于变量,对表达式是不行的,我是这样理解的,其实这样的编程写法大可不必,作为理解运算符优先级和结合性到可以理解,下面给出我对优先级和结合性记忆的方法,
优先级:成员,逗号丢一边,123赋值,移位,逻辑位插中间
结合性:123赋值,自加减,乘除余
对于优先级口诀,成员指的是例如类成员运算符".",数组下标符“[]”等一些符号,逗号是指逗号运算符,这两个中成员是所有运算符里优先级最高的,逗号是最低的
123赋值:意思就是单目,双目,三目运算符,赋值是赋值运算符,他们优先级按顺序递减
通过上面的口诀就记了个大概,具体的还需要知道一般顺序:算术>关系>逻辑
移位,逻辑位插中间:这句意思就是把移位>>,