Java仕様を読んでいます。負のオペランドの符号付き右シフト演算子
n >> sの値は右シフトされたビット位置で、 sign-extensionになります。結果の値は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
Damn。あなたが正しい。ごめんなさい! – xdevel2000