总结 public class Test1 { static int a = 1, b = 2; /** * 两个值互换,最常用的方法 */ public static void change1() { int t = 0; t = a; a = b; b = t; System.out.println("a= " + a + " b= " + b); } /** * 这个方法,通过+,-实现 */ public static void change2() { a = a + b; b = a - b; a = a - b; System.out.println("a= " + a + " b= " + b); } public static void change3() { a = a ^ b; b = a ^ b; a = a ^ b; System.out.println("a= " + a + " b= " + b); } public static void change4() { a = b + (b = a) * 0; System.out.println("a= " + a + " b= " + b); } public static void main(String[] args) { // change1(); // change2(); change3(); }}
X=X^Y; x等于x的y次方; Y=Y√X; y等于x的y次根; X=LOGyX; x等于log以y为底; 这个方法不可行 因为要是 x y 不是整数 那计算出来的结果 会有差异
操作符的操作数是从左向右求值的。为了求表达式 x ^= expr 的值,x 的值是在计算expr 之前被提取的,并且这两个值的异或结果被赋 给变量x// Java 中x^= y^= x^= y 的实际行为 int tmp1 = x ; // x 在表达式中第一次出现 int tmp2 = y ; // y 的第一次出现 int tmp3 = x ^ y ; // 计算x ^ y x = tmp3 ; // 最后一个赋值:存储x ^ y 到 x y = tmp2 ^ tmp3 ; // 第二个赋值:存储最初的x 值到y 中 x = tmp1 ^ y ; // 第一个赋值:存储0 到x 中-----------摘自java解惑
x=x^y;
y=x^y;
x=x^y;
int x=2,y=3;
x=y+(y=x)*0;
x=y+(y=x)*0
这样明白吧。
按照运算次序,(y=x)总是先运行的吧!
public class Test1 { static int a = 1, b = 2; /**
* 两个值互换,最常用的方法
*/
public static void change1() {
int t = 0;
t = a;
a = b;
b = t;
System.out.println("a= " + a + " b= " + b);
} /**
* 这个方法,通过+,-实现
*/
public static void change2() {
a = a + b;
b = a - b;
a = a - b;
System.out.println("a= " + a + " b= " + b);
} public static void change3() {
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println("a= " + a + " b= " + b);
} public static void change4() {
a = b + (b = a) * 0;
System.out.println("a= " + a + " b= " + b);
} public static void main(String[] args) {
// change1();
// change2();
change3();
}}
应该是x=3+(y=2)*10;这样看起来更直观一点.8楼确实nb
x=y+(y=x)*0; 要是按下面这样写结果就不对了。Java codeint x=2,y=3;
x=(y=x)*0+y;
Y=Y√X; y等于x的y次根;
X=LOGyX; x等于log以y为底;看不懂不要怪我,这个方法应该挺多滴。
从左到右执行,先将y值提出等于3,然后执行(y=x),此时y等于2,最终x=3,不知道这样对不对
觉得这样也行 没测试过 口算的
Y=Y√X; y等于x的y次根;
X=LOGyX; x等于log以y为底; 这个方法不可行 因为要是 x y 不是整数 那计算出来的结果 会有差异
expr 的值,x 的值是在计算expr 之前被提取的,并且这两个值的异或结果被赋
给变量x// Java 中x^= y^= x^= y 的实际行为
int tmp1 = x ; // x 在表达式中第一次出现
int tmp2 = y ; // y 的第一次出现
int tmp3 = x ^ y ; // 计算x ^ y
x = tmp3 ; // 最后一个赋值:存储x ^ y 到 x
y = tmp2 ^ tmp3 ; // 第二个赋值:存储最初的x 值到y 中
x = tmp1 ^ y ; // 第一个赋值:存储0 到x 中-----------摘自java解惑
b=a+b;
a=b-a;
b=b-a;
拍一下板砖, 2=3+(3=2)*0 这种解释永远是不正确的,
代数(X,Y,Z等)和常数(1,2,3等)不一样 怎么能用3=2的式子呢,请自省一下。
只能说理解得不够深!
这个方法我不太理解???
不过两数交换的方法可真多呀
学习了!!!!