问题标签 [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.
javascript - Javascript 三元运算符的运算符优先级
我似乎无法与三元运算符结合使用此代码的第一部分( += )。
我认为这段代码的工作方式如下:
但这不正确,因为这会在我的控制台中出现错误。
所以我的问题是我应该如何正确地解释这段代码?
java - 为什么 Java 没有条件与和条件或运算符的复合赋值版本?(&&=, ||=)
所以对于布尔值的二元运算符,Java 有&
, |
, ^
,&&
和||
.
让我们在这里简要总结一下他们所做的事情:
对于
&
,结果值是true
如果两个操作数值都是true
; 否则,结果为false
。对于
|
,结果值是false
如果两个操作数值都是false
; 否则,结果为true
。对于
^
,结果值是true
如果操作数值不同;否则,结果为false
。
&&
运算符类似于但仅当&
其左侧操作数的值为 时才计算其右侧操作数true
。
||
运算符类似于,但仅当其|
左侧操作数的值为 时才计算其右侧操作数false
。
现在,在所有 5 个中,其中 3 个具有复合赋值版本,|=
即&=
和^=
。所以我的问题很明显:为什么 Java 不提供&&=
和||=
?我发现我需要的比我需要的多&=
,而且|=
。
而且我不认为“因为它太长”是一个好的答案,因为 Java 有>>>=
. 这种遗漏一定有更好的理由。
有12个赋值运算符;[...]
= *= /= %= += -= <<= >>= >>>= &= ^= |=
有人评论说,如果&&=
和||=
被实施,那么它将是唯一不首先评估右手边的运算符。我认为复合赋值运算符首先评估右手边的想法是错误的。
形式的复合赋值表达式
E1 op= E2
等价于E1 = (T)((E1) op (E2))
,其中T
是 的类型E1
,除了E1
只计算一次。
作为证明,以下代码段抛出 a NullPointerException
,而不是ArrayIndexOutOfBoundsException
.
java - Java中的快捷“或赋值”(|=)运算符
我在 Java 中有很多比较要做,我想知道其中一个或多个是否为真。比较字符串很长且难以阅读,因此为了便于阅读,我将其拆分,并自动使用快捷操作符|=
而不是negativeValue = negativeValue || boolean
.
negativeValue
如果任何 default<something> 值为负,我希望是真的。这是有效的吗?它会达到我的预期吗?我在 Sun 的网站或 stackoverflow 上看不到它,但 Eclipse 似乎没有问题,并且代码可以编译并运行。
同样,如果我想执行几个逻辑交集,我可以使用&=
代替&&
吗?
java - “|=”操作在C++中是什么意思?
我有以下代码,但我不明白这是什么意思:
任何人都可以帮助我!
java - 改变行为可能导致精度损失
在 Java 中,当你这样做时
您可能会丢失精度错误。但是为什么如果你这样做
没有错误吗?
java - 复合分配的自动(取消)装箱失败
由于复合赋值和递增/递减运算符中的隐式转换,以下编译:
并且由于自动装箱和自动拆箱,以下内容也可以编译:
然而,以下代码段中的最后一行给出了编译时错误:
谁能帮我弄清楚这里发生了什么?该byte b
版本编译得很好,所以不应该Byte bb
效仿并根据需要进行适当的装箱和拆箱以适应吗?
额外的问题
那么有没有办法让复合赋值运算符与左侧的 , 和 一起使用,或者它们Byte
对于Character
这些类型来说只是非法的(!!!) ?Short
scripting - 有没有一种更简洁的方法可以将“else if”添加到 Awk 等中的条件赋值?
某些语言(如 awk 脚本)允许条件赋值。例如,假设您有一个格式为的列表文件:
例如
你想对超过 1 美元的所有东西征税......你可以使用 awk 脚本:
...它使用条件赋值来缩短语法。
但是假设您还想为所有超过 20 美元的商品提供 1 美元的折扣,超过 40 美元的商品也可以享受 2 美元的折扣。好吧,在像 c 这样的语言中,您通常会执行以下操作:
...好吧,我发现您可以将 awk 或其他脚本语言混杂到 COMPOUND 分配中。例如:
我的问题是
a)复合赋值(像这样)通常与支持条件赋值的脚本语言普遍兼容?
b)在 awk 脚本中是否有一种非杂乱无章的方式来进行多条件赋值?
澄清一下: 我只是在谈论赋值的简写 (<...>?<...>:<...>;,而不是传统的条件赋值,我已经知道如何进行类似 c 的复合赋值在 Awk 脚本中。作为旁注,至于为什么我可以使用速记,我认为优点是显而易见的——它很短。但是就像正则表达式一样,你可能想写一个很好的描述你的混淆语法为了后代的缘故.
c++ - i += ++i 在 C++0x 中是未定义的行为吗?
我对我发现的解释深信不疑,就 C++0x 而言,这i = ++i
并不是未定义的,但我无法判断 的行为是否 i += ++i
定义明确。有接盘侠吗?
python - += 在 Python 中究竟做了什么?
我需要知道+=
Python 中的功能。就是这么简单。我也很欣赏 Python 中其他速记工具定义的链接。
c - 复合/while循环
我想将十进制小时数转换为实时时间,我可以做得很好,但如果小时数超过 24 并且分钟数超过 60 分钟,我想增加天数。while 循环确实减去并打印出新值,但小时/天并没有变得复杂。这是 1 天 1 小时 77 分钟,我希望它阅读 1 天 2 小时 17 分钟,但我得到了 1 天 1 小时 17 分钟。