byte x = -1;
for(int i = 0; i < 8; i++)
{
x = (byte) (x >>> 1);
System.out.println("X: " + x);
}
據我所知,java存儲數據的二進制補碼,意思是-1 = 11111111(根據維基百科)。java位操作
另外,來自java文檔: 「位模式由左側操作數給出,右側操作數要移位的位置數,無符號右移運算符」>>>「移位零位置於最左邊的位置,而「>>」後面的最左邊位置取決於符號的擴展名。「
這意味着>>>每次都會將0移到最左邊的位。因此,我希望這個代碼是
迭代:X
的比特表示0:11111111
1:01111111
2:00111111
3:00011111
。 .. so on
但是,我的輸出是alwa ys X:-1,這意味着(我猜)>>>將符號位放在最左邊的位置。所以我然後嘗試>>,並得到相同的結果。
發生了什麼事?我會希望我的輸出是:X:-1,x:127,x:63等
這是在Java中謎題的問題之一。 – starblue 2009-02-19 07:49:44