问题描述
JLS说
shift表达式的类型是左手的提升类型 操作数。
如果左侧操作数的提升类型为int,则仅 右侧操作数的五个最低位用作移位 距离。好像右手操作数受到了 掩码值为0x1f的按位逻辑AND运算符&(§15.22.1) (0b11111)。因此,实际使用的换档距离始终在 范围为0到31(含)。
如果左侧操作数的提升类型很长,则仅 右操作数的最低6位用作移位 距离。好像右手操作数受到了 掩码值为0x3f的按位逻辑AND运算符&(§15.22.1) (0b111111)。因此,实际使用的移动距离始终为 范围为0到63(含)。
因此,如果我使用(byte)100<<100
和(short)100<<100
之类的转换运算符显式地创建一个字节和一个短操作数,那么正确的操作数的可用位是什么?
编辑:如果操作数已经使用强制转换运算符转换为其他(较小的)类型,则该操作数是否会进行数值提升(一元/二进制)?如果是这种情况,您将如何解释具有字节变量b1 = (byte)(b2 + b3)
的表达式,因为在进行强制转换之后,字节结果可能会按照数字提升转换为int?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)