首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数字提升只适用于算术运算符?

问数字提升只适用于算术运算符?
EN

Stack Overflow用户
提问于 2020-08-14 14:49:03
回答 2查看 75关注 0票数 2

JLS指出,数值提升应用于算术运算符的操作数。

数值提升应用于算术运算符的操作数。数值提升上下文允许使用:身份转换(§5.1.1)、扩大原语转换(§5.1.2)、取消装箱转换(§5.1.8)

然而,在我的经验中,我发现数值提升也适用于其他运算符的操作数,如位运算符。我发现这说

当使用乘法运算符(%,*,/),加法运算符(+,-),比较运算符(<,>,<=,>=),相等运算符(==,!=)和整数位运算符(&,AC.26,^)时,可以发生这些转换。

那我是不是漏掉了什么?

编辑:其他没有列出的操作符呢,比如&、\x、>>、<<、>>>等等?

编辑2:正如@Turing85和@Stephen所指出的,这个问题只适用于JLS 5到11,现在已经解决了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-14 15:28:39

您找到的文本出现在JLS 第5.6节中。值得注意的是:

  1. 这是介绍性的描述性文本,而不是规范性文本。
  2. 在这种情况下,它没有确切地说明“算术”运算符的含义。
  3. 相反,它并没有说数字提升不适用于(可以说)不是“算术”运算符的其他运算符。

如果继续阅读5.6.1和5.6.2部分,您将发现一元和二进制数字晋升适用的运算符。

请注意,对于JLS版本5和11,上述情况是正确的。到JLS 14时,它们已经将5.6.1和5.6.2部分折叠到5.6节中。措辞已经改变(删除你认为自相矛盾的案文)。有关经营者全部(仍)列在名单上。

(这是编辑整理,而不是实际语言语义的改变。)

票数 1
EN

Stack Overflow用户

发布于 2020-08-14 14:57:10

二进制数值提升(JLS 5.6.2)适用于“某些二进制运算符”的操作数,该操作数包括按位运算符&、^和\x。引用:

二进制数字提升是对某些运算符的操作数执行的:

  • 乘法算子*、/和% (§15.17)
  • 数值类型+和- (§15.18.2)的加减运算符
  • 数值比较算子<,<=,>和>= (§15.20.1)
  • 数值相等算子==和!= (§15.21.1)
  • 整数位运算符&,^,和x (§15.22.1)
  • 在某些情况下,条件运算符?:(§15.25)

至于&&和\,这些都是布尔人的操作符,并且有数字提升。

位移位操作符>>、<<、>>>遵循不同的规则:数值推广分别应用于操作数,表达式的类型完全由左手操作数决定。这意味着以下代码是有效的:

代码语言:javascript
复制
int i =1;
long l = 2;
int j = i << l;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63415067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档