问题标签 [compound-assignment]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
98855 浏览

javascript - Javascript 三元运算符的运算符优先级

我似乎无法与三元运算符结合使用此代码的第一部分( += )。

我认为这段代码的工作方式如下:

但这不正确,因为这会在我的控制台中出现错误。

所以我的问题是我应该如何正确地解释这段代码?

0 投票
11 回答
17448 浏览

java - 为什么 Java 没有条件与和条件或运算符的复合赋值版本?(&&=, ||=)

所以对于布尔值的二元运算符,Java 有&, |, ^,&&||.

让我们在这里简要总结一下他们所做的事情:

对于&,结果值是true如果两个操作数值都是true; 否则,结果为false

对于|,结果值是false如果两个操作数值都是false; 否则,结果为true

对于^,结果值是true如果操作数值不同;否则,结果为false

&&运算符类似于但仅当&其左侧操作数的值为 时才计算其右侧操作数true

||运算符类似于,但仅当其|左侧操作数的值为 时才计算其右侧操作数false

现在,在所有 5 个中,其中 3 个具有复合赋值版本,|=&=^=。所以我的问题很明显:为什么 Java 不提供&&=||=?我发现我需要的比我需要的多&=,而且|=

而且我不认为“因为它太长”是一个好的答案,因为 Java 有>>>=. 这种遗漏一定有更好的理由。


15.26 赋值运算符

有12个赋值运算符;[...]= *= /= %= += -= <<= >>= >>>= &= ^= |=


有人评论说,如果&&=||=被实施,那么它将是唯一不首先评估右手边的运算符。我认为复合赋值运算符首先评估右手边的想法是错误的。

15.26.2 复合赋值运算符

形式的复合赋值表达式E1 op= E2等价于E1 = (T)((E1) op (E2)),其中T是 的类型E1,除了E1只计算一次。

作为证明,以下代码段抛出 a NullPointerException,而不是ArrayIndexOutOfBoundsException.

0 投票
8 回答
64559 浏览

java - Java中的快捷“或赋值”(|=)运算符

我在 Java 中有很多比较要做,我想知道其中一个或多个是否为真。比较字符串很长且难以阅读,因此为了便于阅读,我将其拆分,并自动使用快捷操作符|=而不是negativeValue = negativeValue || boolean.

negativeValue如果任何 default<something> 值为负,我希望是真的。这是有效的吗?它会达到我的预期吗?我在 Sun 的网站或 stackoverflow 上看不到它,但 Eclipse 似乎没有问题,并且代码可以编译并运行。


同样,如果我想执行几个逻辑交集,我可以使用&=代替&&吗?

0 投票
8 回答
686 浏览

java - “|=”操作在C++中是什么意思?

我有以下代码,但我不明白这是什么意思:

任何人都可以帮助我!

0 投票
1 回答
2778 浏览

java - 改变行为可能导致精度损失

在 Java 中,当你这样做时

您可能会丢失精度错误。但是为什么如果你这样做

没有错误吗?

0 投票
1 回答
338 浏览

java - 复合分配的自动(取消)装箱失败

由于复合赋值和递增/递减运算符中的隐式转换,以下编译:

并且由于自动装箱和自动拆箱,以下内容也可以编译:

然而,以下代码段中的最后一行给出了编译时错误:

谁能帮我弄清楚这里发生了什么?该byte b版本编译得很好,所以不应该Byte bb效仿并根据需要进行适当的装箱和拆箱以适应吗?


额外的问题

那么有没有办法让复合赋值运算符与左侧的 , 和 一起使用,或者它们Byte对于Character这些类型来说只是非法的(!!!) ?Short

0 投票
3 回答
1016 浏览

scripting - 有没有一种更简洁的方法可以将“else if”添加到 Awk 等中的条件赋值?

某些语言(如 awk 脚本)允许条件赋值。例如,假设您有一个格式为的列表文件:

例如

你想对超过 1 美元的所有东西征税......你可以使用 awk 脚本:

...它使用条件赋值来缩短语法。

但是假设您还想为所有超过 20 美元的商品提供 1 美元的折扣,超过 40 美元的商品也可以享受 2 美元的折扣。好吧,在像 c 这样的语言中,您通常会执行以下操作:

...好吧,我发现您可以将 awk 或其他脚本语言混杂到 COMPOUND 分配中。例如:

我的问题是

a)复合赋值(像这样)通常与支持条件赋值的脚本语言普遍兼容?
b)在 awk 脚本中是否有一种非杂乱无章的方式来进行多条件赋值?

澄清一下: 我只是在谈论赋值的简写 (<...>?<...>:<...>;,而不是传统的条件赋值,我已经知道如何进行类似 c 的复合赋值在 Awk 脚本中。作为旁注,至于为什么我可以使用速记,我认为优点是显而易见的——它很短。但是就像正则表达式一样,你可能想写一个很好的描述你的混淆语法为了后代的缘故.

0 投票
1 回答
736 浏览

c++ - i += ++i 在 C++0x 中是未定义的行为吗?

我对我发现的解释深信不疑,就 C++0x 而言,这i = ++i 并不是未定义的,但我无法判断 的行为是否 i += ++i定义明确。有接盘侠吗?

0 投票
15 回答
740888 浏览

python - += 在 Python 中究竟做了什么?

我需要知道+=Python 中的功能。就是这么简单。我也很欣赏 Python 中其他速记工具定义的链接。

0 投票
5 回答
116 浏览

c - 复合/while循环

我想将十进制小时数转换为实时时间,我可以做得很好,但如果小时数超过 24 并且分钟数超过 60 分钟,我想增加天数。while 循环确实减去并打印出新值,但小时/天并没有变得复杂。这是 1 天 1 小时 77 分钟,我希望它阅读 1 天 2 小时 17 分钟,但我得到了 1 天 1 小时 17 分钟。