关于++、--的c++和java对比的两个问题

marcal 2002-12-19 12:29:46
首先是下面一段代码,为什么c++的结果会和java的结果不同?
后面的注释就是结果,对于java我用freejava对于c++我用borland c++ builder6.0
public static void add3()
//这里的关键是我们在编写一些循环的时候。这样的语句将会使我们的程序出现死循环
{
int i=3;
i++;
System.out.println("i="+i);//4

i=3;
i=i++;
System.out.println("i="+i);//3

i=3;
i=++i;
System.out.println("i="+i);//4
/*borland c++ builder example
int i=3;
i++;
ShowMessage("i="+IntToStr(i));//4

i=3;
i=i++;
ShowMessage("i="+IntToStr(i));//4

i=3; i=++i;
ShowMessage("i="+IntToStr(i));//4
*/
}


然后还有另一个奇特的问题
public static void add()//简单的运算看不出什么不同
{
int i=3,j;
j=i++;
System.out.println("i="+i);//4
System.out.println("j="+j);//3
i=3;
j=++i;
System.out.println("i="+i);//4
System.out.println("j="+j);//4
/*c++ example
int i=3,j;
j=i++;
ShowMessage("i="+IntToStr(i));//4
ShowMessage("j="+IntToStr(j));//3
i=3;
j=++i;
ShowMessage("i="+IntToStr(i));//4
ShowMessage("j="+IntToStr(j));//4
*/
}

public static void add1()
{
System.out.println("(++i)+(++i)+(++i)");//4
int i=3,j;
j=++i;
System.out.println("i="+i);//4
System.out.println("j="+j);//4

i=3;
j=(++i)+(++i);
System.out.println("i="+i);//5
System.out.println("j="+j);//9 4+5

i=3;
j=(++i)+(++i)+(++i);
System.out.println("i="+i);//6
System.out.println("j="+j);//15 4+5+6

/* borland c++ builder example
int i=3,j;
j=(++i);
ShowMessage("i="+IntToStr(i)); //4
ShowMessage("j="+IntToStr(j)); //4 4
i=3;
j=(++i)+(++i);
ShowMessage("i="+IntToStr(i)); //5
ShowMessage("j="+IntToStr(j)); //10 5+5
i=3;
j=(++i)+(++i)+(++i);
ShowMessage("i="+IntToStr(i)); //6
ShowMessage("j="+IntToStr(j)); //18 6+6+6
*/
}
public static void add11()
//无论对于java还是c++,“()”有没有都是一样的
{
System.out.println("++i + ++i + ++i ");//4
int i=3,j;
j=++i;
System.out.println("i="+i);//4
System.out.println("j="+j);//4

i=3;
j= ++i + ++i ;
System.out.println("i="+i);//5
System.out.println("j="+j);//9 4+5

i=3;
j= ++i + ++i + ++i ;
System.out.println("i="+i);//6
System.out.println("j="+j);//15 4+5+6
}

public static void add2()
{
System.out.println("(i++)+(i++)+(i++)");//4
int i=3,j;
j=(i++);
System.out.println("i="+i);//4
System.out.println("j="+j);//3

i=3;
j=(i++)+(i++);
System.out.println("i="+i);//5
System.out.println("j="+j);//7 3+4

i=3;
j=(i++)+(i++)+(i++);
System.out.println("i="+i);//6
System.out.println("j="+j);//12 3+4+5

/*borland c++ builder example
int i=3,j;

j=(i++);
ShowMessage("i="+IntToStr(i)); //4
ShowMessage("j="+IntToStr(j)); //3 3

i=3;
j=(i++)+(i++);
ShowMessage("i="+IntToStr(i)); //5
ShowMessage("j="+IntToStr(j)); //6 3+3

i=3;
j=(i++)+(i++)+(i++);
ShowMessage("i="+IntToStr(i)); //6
ShowMessage("j="+IntToStr(j)); //9 3+3+3
*/
}
public static void add22()
{
System.out.println("i++ + i++ + i++");//4
int i=3,j;
j=i++;
System.out.println("i="+i);//4
System.out.println("j="+j);//3

i=3;
j= i++ + i++ ;
System.out.println("i="+i);//5
System.out.println("j="+j);//7 3+4

i=3;
j= i++ + i++ + i++;
System.out.println("i="+i);//6
System.out.println("j="+j);//12 3+4+5
}
...全文
38 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yatuor 2002-12-19
  • 打赏
  • 举报
回复
不要花时间在这个上面了,知道标准c++和java中++ --的实现就行了
其他像你写的+++,---都是和编译器有关的,每个编译器都有自己的计算顺序,别说java和c,就同样是c或java的编译器,结果都可能不同
标准里面没定义的东西,写程序看一下自己用的编译器是什么顺序就行了,而且有可能造成二义性的代码最好不要写,不好移植的,如:
j= i++ + i++ ;
写成temp=i++;
j=temp+temp;
不好吗?
marcal 2002-12-19
  • 打赏
  • 举报
回复
up

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧