解决方案 »
- java如何去执行jsp界面,通过openConnection
- java 如何进行串口通信
- 初学者的疑惑!!
- 谁有用年nio写的客户端和服务器端来进行多人通讯的例子?
- 请各位帮帮忙,帮我学习一下多线程的问题,我感觉很难。?
- 用过Weblogic的帮帮我?
- 请教下map的键和值的相互转换
- 用JLabel显示图片,为什么总是显示不了?
- 300分求《JDBC Database Access with Java: A Tutorial and Annotated Reference》电子书
- Java中如何创建一个新文件(请高手指教)
- 那位高手来解释一下System类中out,err和in的原理
- 一个小问题,不是很重要,但是不懂,请教一下下
i++ + ++i + i先算 i++ 1 i=2++i 3 i=31 + 3 + i = 7
如果真是 还真受教了
int j=i++ + ++i +i;i++ 这时候i 是1 后面用的会i++此时i是2了
++i 这时候 因为在使用前要加1 此时i成3了
后面的i也是3了
所以是1+3+3
int sum = i++ + ++i + i;
1 + 3 + 3 = 7
NO,java中就是1+3+3=7,c/c++中没有指定操作符运算顺序,所以编译器相关。
因为各种编译器做了不同的编译器优化,
如vs2008优化之后是:
对
int i = 1;
int sum = i++ + ++i + i;
vs2008是在处理完i++和++i后在运算,而i有一次前++,一次后++,那么三个加数的值就是2,那么sum=2+2+2,运算完sum之后,i的值就为3了,因为i有一次后++
同理,那么
i=1;
sum = i++ + ++i + ++i ;
sum实际运算时就是3+3+3
这是vs的编译器的优化,这种问题没有去深究的
不知道这个结果对不对啊?
写个测试这个过程的程序// The begining of C program: test.c.// Header files included.
#include <stdio.h>int main ( void )
{
int i=1;
int sum=0;
sum = i++ + ++i + i;
printf ( "The summary of "i++ + ++i + i" is:%d\n",sum );
return 0;
}// The end of the C program: test.c.上面的测试只能得到结果,不能测试其中的过程啊,不知道哪位来给个更好的办法?
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int i=1;
int sum=0;
System.out.println(i);
sum = i++;
System.out.println(i);
sum=sum+ ++i;
System.out.println(i);
sum=sum+ i;
System.out.println(i);
System.out.println(sum);
}}
答案:
1
2
3
3
7
即
sum=1+3+3=7
i++在使用i之后,使i的值加1,因此执行完i++后,整个表达式的为i,而i的值变为i+1。
++i在使用i之前,使i的值加1,因此执行完++i后,整个表达式和i 的值均为i+1。
i++为1,这个时候i=2
所以++i=3,这个时候i=3
所以=7.
vs2005 结果是7