求解,
int a = 3;
int b = 5;
a = b + ( b = a ) - b ;
话说这是我从百度上看到的一段代码,一句就可以完成数据置换,谁能帮我说说是怎样完成的么?{:soso_e134:} 作者: 黑色海 时间: 2013-9-22 17:30
看不懂,等高手来解释作者: yxz 时间: 2013-9-22 17:31 本帖最后由 yxz 于 2013-9-22 17:33 编辑
说实话,这道题的刁钻程度称得上面试级的了。
我刚才自己写了点代码才算搞明白了。
int a=5;
System.out.print(a+(a=1));
这样结果是6
int a=5;
System.out.print((a=1)+a);
这样结果是2
这说明解释器加载顺序是从左到右的。
再看LZ的问题。
b + ( b = a ) - b
括号最先被执行,前面一个b是被加载之前b的原始值,后面一个b最后加载,是括号里赋值运算之后的值
也就是换句话说。
a = b + ( b = a ) - b ;
这个东西可以拆解为
a = 6 + (6 = 3) - 3;
结果就是b=3,a=6。
为了证明我之前的逻辑,我用Python跑了一下,不通过,然后用C语言跑了一下,结果错误。
说明通用性不是很强。作者: HM马强 时间: 2013-9-22 17:33
版主大哥,怎么改啊...我不知道啊... 作者: Leo_yeung 时间: 2013-10-4 22:40
这个是利用两个数的和值,不通过第三方变量来实现连个变量的置换的;
表达式a = b + ( b = a ) - b ;中,在赋值号的右边,b是原来的值,然后(b=a)将a的值赋给b,最后一个b的值也已经是a赋给它的值,所以赋值号右边就等同于b+a-a,所以在这样实现了两个变量值的置换。