无符号右移不是右边丢弃的吗,那像如下代码所示,一上来就右移24位只剩下高8位了,异动的24位全部丢弃了,那第二次还哪来的位可以用来移动?
int str1 = 0x7ffffff;
randomAccessFile.write((str1 >>> 24) );
randomAccessFile.write((str1 >>> 16) );
randomAccessFile.write((str1 >>> 8) );
randomAccessFile.write(str1 & 0xff);
低位溢出,高位补0。注意,无符号右移(>>>)中的符号位(最高位)也跟着变,无符号的意思是将符号位当作数字位看待。如:-1>>>1结果为2147483647。这个数字应该比较熟悉,看两个输出语句就知道是什么了:
System.out.println(Integer.toBinaryString(-1>>>1));
System.out.println(Integer.toBinaryString(Integer.MAX_VALUE));
输出结果为:
1111111111111111111111111111111
1111111111111111111111111111111
-1>>>1竟然得到了int所能表示的最大整数,
java 中的string 是不可变的,write的时候虽然右移了但是并没有改变 str1本身,而是重新创建了一个右移后的字节,因此不会有你说的问题。不知道这样讲明白么?