有点疼,分给我吧,貌似没人敢那么用。 还是说下过程,我觉得是这样,不对别拍砖 x+=y+=x+=y; int x=6,y=8; x = 6+(y+=x+=y) x = 6 +(y = 8+(x+=y)) x = 6 +(y = 8+(x = 6 + 8)) x = 6 +(y = 8 + 14) 所以 x = 28 y = 22;
java和C不一样,我觉得是这样,不对荒淫拍砖x+=y+=x+=y; x+=(y+=(x+=y)); x = x + (y += (x += y)) x = x + (y = y + (x += y)) x = x + (y = y + (x = x + y)) 所以 x 为 x + y + x + y 也就是 6 + 8 + 6 + 8 = 28; y 为 y + x + y 也就是 8 + 6 + 8 = 22;
我出一道题 int x=6,y=8; x ^= y ^= x ^= y; 问 x 和 y 为多少?
根据上面的过程得出推论 x^=y^=x^=y; x^=(y^=(x^=y)); x = x ^ (y ^= (x ^= y)) x = x ^ (y = y ^ (x ^= y)) x = x ^ (y = y ^ (x = x ^ y)) 所以 x 为 x ^ y ^ x ^ y 也就是 6 ^ 8 ^ 6 ^ 8 = 0; y 为 y ^ x ^ y 也就是 8 ^ 6 ^ 8 = 6;请问上面的做法对吗?如果是错的,请找出原因。
in java解惑 一书 // 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中
看看下面的代码 为什么结果会不一样,你就会明白 /** Author <Dengxu> * Bug Report To <e-mail:[email protected]> * Blogs <http://blog.csdn.net/dengxu11> **********************************************/public class uc {
public uc() { } public static void main(String[] args) { int x = 6, y = 8; x += y += x += y; System.out.println("x = " + x + ", y = " + y); } } /* Author <Dengxu> * Bug Report To <e-mail:[email protected]> * Blogs <http://blog.csdn.net/dengxu11> * * ABOUT THE C PROGRAMMING LANGUAGE * DENNIS MACALISTAIR RITCHIE (BORN SEPTEM * -BER 9, 1941) IS THE CREATOR OF THE C PR * -OGRAMMING LANGUAGE AND A KEY DEVELOPER * OF THE UNIX OPERATING SYSTEM. ******************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h>int main(int argc, char *argv[]) { int x = 6, y = 8; x += y += x += y; printf("x = %d, y = %d\n", x, y); return 0; }
是的,你所说的就是左结合和右结合的问题。 java和C在处理方面是有差异的,C是右结合的
int x=6,y=8; x+=y+=x+=y; System.out.println("x"+x+" y"+y);从右往左看x+=y+=x+=y; x+=y+=x=14; x+=y=22; x=28;
还是说下过程,我觉得是这样,不对别拍砖
x+=y+=x+=y;
int x=6,y=8;
x = 6+(y+=x+=y)
x = 6 +(y = 8+(x+=y))
x = 6 +(y = 8+(x = 6 + 8))
x = 6 +(y = 8 + 14)
所以 x = 28 y = 22;
x+=(y+=(x+=y));
x = x + (y += (x += y))
x = x + (y = y + (x += y))
x = x + (y = y + (x = x + y))
所以
x 为 x + y + x + y 也就是 6 + 8 + 6 + 8 = 28;
y 为 y + x + y 也就是 8 + 6 + 8 = 22;
int x=6,y=8;
x ^= y ^= x ^= y;
问 x 和 y 为多少?
x^=y^=x^=y;
x^=(y^=(x^=y));
x = x ^ (y ^= (x ^= y))
x = x ^ (y = y ^ (x ^= y))
x = x ^ (y = y ^ (x = x ^ y))
所以
x 为 x ^ y ^ x ^ y 也就是 6 ^ 8 ^ 6 ^ 8 = 0;
y 为 y ^ x ^ y 也就是 8 ^ 6 ^ 8 = 6;请问上面的做法对吗?如果是错的,请找出原因。
// 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中
/** Author <Dengxu>
* Bug Report To <e-mail:[email protected]>
* Blogs <http://blog.csdn.net/dengxu11>
**********************************************/public class uc {
public uc() {
} public static void main(String[] args) {
int x = 6, y = 8;
x += y += x += y;
System.out.println("x = " + x + ", y = " + y);
}
}
/* Author <Dengxu>
* Bug Report To <e-mail:[email protected]>
* Blogs <http://blog.csdn.net/dengxu11>
*
* ABOUT THE C PROGRAMMING LANGUAGE
* DENNIS MACALISTAIR RITCHIE (BORN SEPTEM
* -BER 9, 1941) IS THE CREATOR OF THE C PR
* -OGRAMMING LANGUAGE AND A KEY DEVELOPER
* OF THE UNIX OPERATING SYSTEM.
******************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main(int argc, char *argv[])
{
int x = 6, y = 8;
x += y += x += y;
printf("x = %d, y = %d\n", x, y);
return 0;
}
x+=y+=x+=y;
System.out.println("x"+x+" y"+y);从右往左看x+=y+=x+=y;
x+=y+=x=14;
x+=y=22;
x=28;