我正在阅读Java规范,其中写道:
n >> s 的值是将n右移s位并进行符号扩展。结果值为floor(n / 2s)。对于非负数n,这相当于将整数除法运算符/计算的结果截断为2的s次幂。
因此,如果我有以下内容:
27 >> 3 // 00011011 >> 3 = 00000011 = 3 = 27/8
结果是 3
;实际上 27/8 = 3.375
,因此 3
是被截断的值。
但是规范在左操作数为负数时没有说明任何内容。
所以如果我有以下内容:
-50 >> 2 // 11001110 >> 2 = 11110011 = -13 != -50/4
结果是
-13
,但是-50/4=-12.5
,因此-13
不是那个被截断的值。当左操作数为负值时,Java使用什么舍入系统呢?
也许是ceil(n / 2s)?