我正在阅读一些Java文本并获得以下代码:
int[] a = {4,4};
int b = 1;
a[b] = b = 0;
Run Code Online (Sandbox Code Playgroud)
在文中,作者没有给出明确的解释,最后一行的效果是: a[1] = 0;
我不太清楚我理解:评估是如何发生的?
我最近提出了这种方法来交换两个变量的值而不使用第三个变量.
a^=b^=a^=b
但是当我在不同的编译器上尝试上面的代码时,我得到了不同的结果,有些给出了正确的结果,有些则没有.
代码有什么严重错误吗?
我想使用XOR运算符在java中交换两个整数变量的值.
这是我的代码:
int i = 24;
int j = 17;
i ^= j;
j ^= i;
i ^= j;
System.out.println("i : " + i + "\t j : " + j);
Run Code Online (Sandbox Code Playgroud)
它会正常工作,但以下等效代码不起作用:
int i = 24;
int j = 17;
i ^= j ^= i ^= j;
System.out.println("i : " + i + "\t j : " + j);
Run Code Online (Sandbox Code Playgroud)
输出是这样的:
i : 0 j : 24
Run Code Online (Sandbox Code Playgroud)
第一个变量为零!Java有什么问题?
示例代码
int a=3;
int b=4;
a^=(b^=(a^=b));
Run Code Online (Sandbox Code Playgroud)
在c ++中它交换变量,但在java中我们得到a = 0,b = 4为什么?
可能重复:
未定义的行为和序列点
x这段代码后的价值是多少?
int x = 5;
x = ++x + x++;
Run Code Online (Sandbox Code Playgroud)
在Java中,结果是12,但在C++中,结果是13.
我搜索了Java和C++的运算符优先级,它们看起来一样.那么为什么结果不同呢?是因为编译器吗?
我学会了使用Xor运算符来交换两个整数,比如:
我最终得到a = 7和b = 21.
int a = 21;
int b = 7;
a^=b^=a^=b;
我试着像这样在数组上使用xor运算符:
int main()
{
int a[] = {7,21};
a[0]^=a[1]^=a[0]^=a[1];
cout << a[0] <<',' <<a[1];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是0.7
我在Xcode和g ++上编译代码,它们有同样的问题.
Xor swap on array在多行中运行良好:
int main()
{
int a[] = {7,21};
a[0]^=a[1];
a[1]^=a[0];
a[0]^=a[1];
cout << a[0] <<',' <<a[1];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的输出为21,7
以下是我已经找到的信息:
- 问题是关于序列点:Array + XOR交换失败
- 即使对于简单的整数,它们也可能对这个未定义的行为产生副作用:为什么这个语句在java x ^ = y中不起作用^ = x ^ = y;
- 关于xor …