【问题标题】:Bitwise operation && overflow [duplicate]按位运算&&溢出[重复]
【发布时间】:2020-05-30 03:43:01
【问题描述】:

为什么这两行的结果在java中不一样?

int a = 1;
System.out.println(a << 32); //output: 1
System.out.println(a << 31 << 1); //output: 0

【问题讨论】:

    标签: java overflow bitwise-operators


    【解决方案1】:

    JLS 8 § 15.19

    如果左侧操作数的提升类型是 int,那么只有 使用右手操作数的五个最低位

    当移动int 时,移动距离实际上是右操作数 mod 32 的值(至少当右操作数为非负数时)。所以a &lt;&lt; 32a &lt;&lt; 0基本相同,也就是a。但是a &lt;&lt; 31 &lt;&lt; 1首先移动a,其值为0x00000001,左移31得到0x80000000,然后左移1得到0x00000000

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      • 2013-08-28
      • 2012-01-31
      相关资源
      最近更新 更多