对负运算数签名的右移运算符
问题描述:
我正在阅读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)?
答
一般来说Java不采用四舍五入的系统的话,那只是转移一些位。如果需要floor
或ceil
,则使用floor
或ceil
,并在需要时使用位移运算符。
但是,如果您的电话号码> n.5,那么结果将变为四舍五入。试用-77/8。其结果是-9.625,编译器返回-10!不是-9! – xdevel2000
@xdevel -10低于-9.625,这是怎么回事? – Ingo
该死的。你是对的。对不起! – xdevel2000