我正在阅读Java规范。这里写着:
n的值>> s是n右移位s位 符号扩展。结果值为floor(n / 2s)。对于非负面的 n的值,这相当于截断整数除法,如 由整数除法运算符/,由幂2计算。
所以,如果我有以下内容:
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)?
答案 0 :(得分:8)
答案 1 :(得分:1)
一般来说,Java根本不使用舍入系统,它只是移位了一些位。如果您需要floor
或ceil
,请使用floor
或ceil
,并在需要时使用位移运算符。