繁体   English   中英

移位运算符 - 操作数必须可转换为整数基元?

[英]Shift operators - operands must be convertible to an integer primitive?

我正准备参加Java考试,我正在阅读“OCA Java SE 8程序员学习指南(考试1Z0-808)”。 在运营商部分,我发现了这句话:

移位运算符:移位运算符采用两个操作数,其类型必须可转换为整数基元。

我觉得很奇怪,所以我用很长时间测试它:

public class HelloWorld{

     public static void main(String []args){
         long test = 3147483647L;
         System.out.println(test << 1);

     }
}

并且它工作,没有编译器错误和结果是正确的。 这本书有错误还是我误解了书中的引用?

移位运算符>><<JLS第15.19节中定义。 引用:

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

如果在一元数字提升之后移位运算符的每个操作数的类型不是基本整数类型,则这是编译时错误

在谈到“整数原语”时,本书实际上是在谈论“原始整数类型”(在JLS第4.2.1节中定义):

整数类型的值是以下范围内的整数:

  • 对于字节,从-128到127(含)
  • 简而言之,从-32768到32767,包括在内
  • 对于int,从-2147483648到2147483647,包括在内
  • 很长一段时间,从-9223372036854775808到9223372036854775807,包括
  • 对于char,从'\\ u0000'到'\\ uffff',包括0到65535

他们使用的是integer不是Java int时尚,而是作为“整数类型,而不是浮点或其他类型的”。 Java的long也是一个整数,它只是一个64位宽的整数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM