【问题标题】:Java left shift OperatorJava左移运算符
【发布时间】:2019-02-25 11:56:27
【问题描述】:

在 java 中,char a=5 并使用 leftshift 运算符作为 println(a

【问题讨论】:

  • ...我真的不明白你说什么。问题是什么?你有什么问题?
  • << 会将char 隐式转换为int
  • 我收到1310720。从a<<36 我得到80

标签: java bit-manipulation bit-shift


【解决方案1】:

左移应用于intlong 操作数。当您将其应用于charint 时,char 将提升为int,结果为int。因此 262144 是一个有效的结果。

JLS 15.19. Shift Operators:

移位运算符在语法上是左关联的(它们从左到右分组)。

对每个操作数分别执行一元数字提升(第 5.6.1 节)。 (不对操作数执行二进制数字提升(第 5.6.2 节)。)

如果移位运算符的每个操作数的类型在一元数值提升后不是原始整数类型,则会出现编译时错误。

移位表达式的类型是左侧操作数的提升类型

【讨论】:

  • 也许改变提升为扩大?
  • @Lino JLS 说Unary numeric promotion (§5.6.1) is performed on each operand separately.
  • 你是对的,与boxing混淆了
  • Char 因为所有其他类型在转换为 int 期间都被加宽。可以说 int 是 Java 世界的中心。
  • @MS90 - 这不太正确。类型被提升为最接近的更大类型。 char 扩展到 int 不是因为 int 是 java 世界的中心,而是因为它是最接近可以处理 char 的类型(当然 long 也可以,但它太大了,没有必要)。
猜你喜欢
  • 2014-08-02
  • 2013-03-28
  • 2021-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多