#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)”括号之间的“+”究竟是什么意思。
我知道问题有些弱智,大家不要笑话哈。
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)”括号之间的“+”究竟是什么意思。
我知道问题有些弱智,大家不要笑话哈。
解决方案 »
- 关于facade模式
- 请教各位
- Hashtable 能否根据value取key值?
- 一个纯粹为提供包内共享函数的类,其构造函数应该被设计成什么样式?
- 用jubilder 编写的.java和.class,好像不能直接用java.exe 运行
- 请教各位大哥一个关于jdk1.3安装的问题!!
- 深圳的夜景好漂亮,我却在苦读JAVA,呵呵。
- 怎么计算这个值“((3*4)+(8/4))*2+3”
- 如何获取一个随机数?
- 谁有JBuild6的License Key或者Serial Number或者License key File ?
- 请教大家关于HashMap做缓存的测试,看看我这程序有什么问题
- 我写的java程序怎么才能生成exe供其它用户使用??
我的意思是说用C++编译
((j=i++)+(j=i++))+(j=i);
cout<<j也是9而不是7呀。。
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。
这两句,在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
(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;
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++之父都不知道答案是什么 你们老师居然知道?
这种题目根本是没有固定结果的,
N年前我写过一篇文章探讨这问题叫思辨C语言表达式,记得还载下了汇编进行分析。你google思辨C语言 大概能找到。这种老师很白痴,拿我的文章给他看。让他知道这样的代码即使再过10000万年也不会有人写出来。
结果不确定....
么有哪个BT这样写.......