标签: compound-operator



为什么我+ = l编译,其中我是int而l是长?

我发现Java的+ =, - =,*=,/ =复合赋值运算符(好问题:)),但它有一部分我不太明白.借用这个问题:

int i = 5;
long l = 8;
Run Code Online (Sandbox Code Playgroud)

然后i = i + l;将不会编译但i += l;将编译正常.

联系问题的接受答案表明:

形式E1 op = E2的复合赋值表达式等效于E1 =(T)((E1)op(E2)),其中T是E1的类型,除了E1仅被评估一次.

这给出i += l;了与仅评估一次i = (int)((i) + (l));的异常相同的内容i.

A long可能(IIRC甚至保证)长于a int,因此可以保持更大范围的值.

鉴于这种情况很容易导致数据丢失,因为在执行语句(r值表达式评估或赋值)期间的某些时刻必须缩小转换,为什么i += l;不是编译时错误或至少是警告?

java variable-assignment compound-operator

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

a = b <operator> a 是否有复合赋值运算符(其中 <operator> 不是可交换的)?

在很多语言中 a = a + b 可以写成 a += b 在数值运算的情况下,a + b 与 b + a 相同,因此单个复合运算符就足够了。

此外, a = a - b 可以写成 a -=b 。

但是,ab 不等于 ba。因此,复合赋值运算符不适用于 a = b - a

那么,操作a = b op a(其中op可以是 +、-、*、/、% 和顺序很重要)是否有复合赋值运算符?

[非交换操作]

programming-languages compound-operator compound-assignment

5
推荐指数
1
解决办法
624
查看次数

java 按位运算符和等于字符;复合运算符

我有点困惑:

long v = 0;
v <<= 8; 
v |= 230;
Run Code Online (Sandbox Code Playgroud)

我知道 << 是带符号的左移运算符,而 | 按位包含 OR 但我对 equals 的作用感到困惑?

所以拳头 v 是 0。那么 << 没有任何效果?那么它等于 1000 但接下来会发生什么呢?

编辑:我已经编辑了标题,以便其他人更好地找到这个问题:添加了“复合运算符”

java bit-manipulation operators compound-operator

4
推荐指数
2
解决办法
1422
查看次数

在Java中自动捕获= +而不是+ =的使用

我有这种可怕的习惯,键入下面的内容,直到测试时才抓住它:

int i = 1;
int j = 2;
i =+ j;  //i equals 2, not 3 as intended; assign only, + is unary and works on the j
Run Code Online (Sandbox Code Playgroud)

当然,正确的版本是

int i = 1;
int j = 2;
i += j;  //i equals 3, as intended with additive & assignment compound operator
Run Code Online (Sandbox Code Playgroud)

我犯了这么多错误.我不会感到惊讶的是,有一些代码在其中有一个错误,它逃脱了测试用例.必须有办法系统地防止这种情况.有任何想法吗?

java operators compound-operator

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

在python中使用print()和复合运算符

以下代码在python中不起作用

x = 11
print(x += 5)
Run Code Online (Sandbox Code Playgroud)

而这段代码确实如此

x = 11
x += 5
print(x)
Run Code Online (Sandbox Code Playgroud)

这是为什么?

python compound-operator python-3.x

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