無符號右移不是右邊丟棄嗎?
無符號右移不是右邊丟棄的嗎,那像如下代碼所示,一上來就右移24位只剩下高8位了,異動的24位全部丟棄了,那第二次還哪來的位可以用來移動?
int str1 = 0x7ffffff;
randomAccessFile.write((str1 >>> 24) );
randomAccessFile.write((str1 >>> 16) );
randomAccessFile.write((str1 >>> 8) );
randomAccessFile.write(str1 & 0xff);
2017-09-23
低位溢出,高位補0。注意,無符號右移(>>>)中的符號位(最高位)也跟著變,無符號的意思是將符號位當作數(shù)字位看待。如:-1>>>1結果為2147483647。這個數(shù)字應該比較熟悉,看兩個輸出語句就知道是什么了:
System.out.println(Integer.toBinaryString(-1>>>1));
System.out.println(Integer.toBinaryString(Integer.MAX_VALUE));
輸出結果為:
1111111111111111111111111111111
1111111111111111111111111111111
-1>>>1竟然得到了int所能表示的最大整數(shù),
2017-09-23
java 中的string 是不可變的,write的時候雖然右移了但是并沒有改變 str1本身,而是重新創(chuàng)建了一個右移后的字節(jié),因此不會有你說的問題。不知道這樣講明白么?