相关疑难解决方法(0)

Java中评估顺序的规则是什么?

我正在阅读一些Java文本并获得以下代码:

int[] a = {4,4};
int b = 1;
a[b] = b = 0;
Run Code Online (Sandbox Code Playgroud)

在文中,作者没有给出明确的解释,最后一行的效果是: a[1] = 0;

我不太清楚我理解:评估是如何发生的?

java operator-precedence

83
推荐指数
3
解决办法
2万
查看次数

"在不使用第三个变量的情况下交换两个变量的值"中的潜在问题

我最近提出了这种方法来交换两个变量的值而不使用第三个变量.

a^=b^=a^=b

但是当我在不同的编译器上尝试上面的代码时,我得到了不同的结果,有些给出了正确的结果,有些则没有.

代码有什么严重错误吗?

c c++ swap operator-precedence

19
推荐指数
4
解决办法
4772
查看次数

为什么通过XOR交换整数变量不能在一行中工作?

我想使用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有什么问题?

java operators

11
推荐指数
1
解决办法
2830
查看次数

8
推荐指数
2
解决办法
5221
查看次数

运算符优先级,结果是否正确?

可能重复:
未定义的行为和序列点

x这段代码后的价值是多少?

int x = 5;
x = ++x + x++;
Run Code Online (Sandbox Code Playgroud)

在Java中,结果是12,但在C++中,结果是13.

我搜索了Java和C++的运算符优先级,它们看起来一样.那么为什么结果不同呢?是因为编译器吗?

c++ java operator-precedence

8
推荐指数
1
解决办法
614
查看次数

序列点 - Xor Swap on Array得到错误的结果

我学会了使用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 …

c++ compiler-construction

0
推荐指数
1
解决办法
1020
查看次数