我正在閱讀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)?
但是,如果您的電話號碼> n.5,那麼結果將變爲四捨五入。試用-77/8。其結果是-9.625,編譯器返回-10!不是-9! – xdevel2000
@xdevel -10低於-9.625,這是怎麼回事? – Ingo
該死的。你是對的。對不起! – xdevel2000