int i=10; i=i-----i*(i=-3)*i+++++i; printf( i=?); 其实这道题在不同的编译器下运算的结果不一样的,比如JS和C#以及JAVA运行后的结果是-63,在C++下运行的结果就变成了44,以上都是在window平台下VS2010运行的,
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/25 05:09:05
![int i=10; i=i-----i*(i=-3)*i+++++i; printf( i=?); 其实这道题在不同的编译器下运算的结果不一样的,比如JS和C#以及JAVA运行后的结果是-63,在C++下运行的结果就变成了44,以上都是在window平台下VS2010运行的,](/uploads/image/z/8898172-52-2.jpg?t=int+i%3D10%3B+i%3Di-----i%2A%28i%3D-3%29%2Ai%2B%2B%2B%2B%2Bi%3B+printf%28+i%3D%3F%29%3B+%E5%85%B6%E5%AE%9E%E8%BF%99%E9%81%93%E9%A2%98%E5%9C%A8%E4%B8%8D%E5%90%8C%E7%9A%84%E7%BC%96%E8%AF%91%E5%99%A8%E4%B8%8B%E8%BF%90%E7%AE%97%E7%9A%84%E7%BB%93%E6%9E%9C%E4%B8%8D%E4%B8%80%E6%A0%B7%E7%9A%84%2C%E6%AF%94%E5%A6%82JS%E5%92%8CC%23%E4%BB%A5%E5%8F%8AJAVA%E8%BF%90%E8%A1%8C%E5%90%8E%E7%9A%84%E7%BB%93%E6%9E%9C%E6%98%AF-63%2C%E5%9C%A8C%2B%2B%E4%B8%8B%E8%BF%90%E8%A1%8C%E7%9A%84%E7%BB%93%E6%9E%9C%E5%B0%B1%E5%8F%98%E6%88%90%E4%BA%8644%2C%E4%BB%A5%E4%B8%8A%E9%83%BD%E6%98%AF%E5%9C%A8window%E5%B9%B3%E5%8F%B0%E4%B8%8BVS2010%E8%BF%90%E8%A1%8C%E7%9A%84%2C)
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赋值:意思就是单目,双目,三目运算符,赋值是赋值运算符,他们优先级按顺序递减
通过上面的口诀就记了个大概,具体的还需要知道一般顺序:算术>关系>逻辑
移位,逻辑位插中间:这句意思就是把移位>>,