【发布时间】: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
为什么这两行的结果在java中不一样?
int a = 1;
System.out.println(a << 32); //output: 1
System.out.println(a << 31 << 1); //output: 0
【问题讨论】:
标签: java overflow bitwise-operators
如果左侧操作数的提升类型是 int,那么只有 使用右手操作数的五个最低位
当移动int 时,移动距离实际上是右操作数 mod 32 的值(至少当右操作数为非负数时)。所以a << 32与a << 0基本相同,也就是a。但是a << 31 << 1首先移动a,其值为0x00000001,左移31得到0x80000000,然后左移1得到0x00000000。
【讨论】: