#include <iostream>
using namespace std;
int main()
{
int i=5,j;
((j=i++)&&(j=i++))&&(j=i); //j = 7, i=7
((j=i++)+(j=i++))+(j=i); // j=7, i=9
cout<<j<<endl;
cout<<i<<endl;
  i=i+++i+++i;
cout<<i<<endl;
return 0;
}要求把 C++ “翻译” 成java,诡异的事情发生了,我用编译器编译发现,((j=i++)+(j=i++))+(j=i); // j=7, i=9这行得到的j的值应该是9吧,老师给出的答案却是j = 7。还是我理解错了。
另外,((j=i++)&&(j=i++))&&(j=i); //j = 7, i=7
((j=i++)+(j=i++))+(j=i); // j=7, i=9
这两行“翻译”成java怎么“翻译”?搞不懂 那个逻辑操作符"&&"和“((j=i++)+(j=i++))+(j=i)”括号之间的“+”究竟是什么意思。
我知道问题有些弱智,大家不要笑话哈。

解决方案 »

  1.   


     我的意思是说用C++编译
    ((j=i++)+(j=i++))+(j=i);
    cout<<j也是9而不是7呀。。
      

  2.   

    你老师考你的应该是++号的计算时间吧
    int i = 5,j;
    ((j=i++)&&(j=i++))&&(j=i); 
    中&&操作符产生了三个语句,1.j=i++; 2. j=i++; 3. j=i;
    第一句执行后:j=5,i=6;
    第二句执行后:j=6,i=7;
    第三句执行后:j=7,i=7;而在((j=i++)+(j=i++))+(j=i);中只有一条语句,
    并且在最后将i赋值给j,j = i = 7;
    而在这条语句执行之后,i++两次,所以i = 9。
      

  3.   


    这两句,在JAVA中,第一句不成立,因为&&在JAVA中逻辑运算符参与动算的是boolean型所以得改成如下:((j==i++)&&(j==i++))&&(j==i); //j = 7, i=7
    ==>这句是意思是:j==i吗?(这时j=0,i=5);i=i+1(这时i=6);这里,显然不等于i,
    &&会发生短路现像,也是说前面的不为真时,&&后面的语句是不会被执行的.
    所以这时的j=0,i=6第二句是简单的加法运算.
    ((j=i++)+(j=i++))+(j=i); // j=7, i=9
    ==>这是简单的加法最后结果等于21.
    通过上的第一句的运算后,j=0,i=6;
    第一个j=i++执行后;这时j=6,i = 7
    第二个j=i++执行后;这时j=7,i = 8
    j=i执行后;这时j=8,i = 8
    ((j=i++)+(j=i++))+(j=i)=6+7+8=21java代码如下:public class Test { /**
     * @param args
     */
    public static void main(String[] args) {
    int i = 5;
    int j = 0;
    System.out.println(((j == i++) && (j == i++)) && (j == i));
    System.out.println("j==" + j);
    System.out.println("i==" + i);
    System.out.println((j = i++) + (j = i++) + (j = i)); System.out.println("jj==" + j);
    System.out.println("ii==" + i); }
    }
    结果:false
    j==0
    i==6
    21
    jj==8
    ii==8
      

  4.   

    过多的知识点揉在了一起。我的办法是把问题化繁为简。一个一个疑问来实验。int i,j;i=5;
    (i++&&i++)&&(j=i);
    cout<<j;   //7i=5;
    ((i++)+(i++))+(j=i);
    cout<<j;   //5//首先,看上面的这两段语句,结果说明了&&前后是由两个表达式组成的。也就是 表达式&&表达式。
    //++(后置)是在表达式结束以后执行的。为什么&&的前后是两个独立的表达式了。这是为了支持&&的
    //短路算值机制,也就是&&计算了前面一个表达式如果为false以后,就没有必要计算后面的表达式了。
    //从实现原理来说,&&语句实际上是一个小小的if语句。a&&b 也就是。if (a) b ,如果a为假,
    //b表达式是不会被执行的。//其次,说明了+号的前后只是表达式的一部分。a+b连同这个+号都属于一个完整的表达式。所以++(后置)要到
    //整个语句结束后才运行。
    i=5;
    j=i+++i+++i;
    cout<<j;  //15//这段代码,想要考我们++符号是如何划分的。参考结果15,我们很容易的得出结论。
    //编译器,从左到右一个字符一个字符的扫描,尽可能的组成高阶的运算符。
    //所以 i+++i+++i; 就是 (i++) +(i++) +i; 
      

  5.   

    What's the value of i++ + i++?
    It's undefined. Basically, in C and C++, if you read a variable twice in an expression where you also write it, the result is undefined. Don't do that.----Dr. Bjarne Stroustrup (C++之父)
    连c++之父都不知道答案是什么 你们老师居然知道?
      

  6.   

    太俗了,又那种题目开玩笑。
    这种题目根本是没有固定结果的,
    N年前我写过一篇文章探讨这问题叫思辨C语言表达式,记得还载下了汇编进行分析。你google思辨C语言 大概能找到。这种老师很白痴,拿我的文章给他看。让他知道这样的代码即使再过10000万年也不会有人写出来。
      

  7.   

    我们老师说过这样的输出cout<<i+++i+++i<<endl;
    结果不确定....
    么有哪个BT这样写.......
      

  8.   

    根本不知道(j=i++)+(j=i++)中间那个+是干什么的!无语!