问答详情
源自:3-1 RandomAccessFile基本操作

无符号右移不是右边丢弃吗?

无符号右移不是右边丢弃的吗,那像如下代码所示,一上来就右移24位只剩下高8位了,异动的24位全部丢弃了,那第二次还哪来的位可以用来移动?

int str1 = 0x7ffffff;

randomAccessFile.write((str1 >>> 24) );

randomAccessFile.write((str1 >>> 16) );

randomAccessFile.write((str1 >>> 8) );

randomAccessFile.write(str1 & 0xff);


提问者:慕粉3536494 2017-09-23 17:29

个回答

  • 听卡农的码农
    2017-09-23 22:17:16

    低位溢出,高位补0。注意,无符号右移(>>>)中的符号位(最高位)也跟着变,无符号的意思是将符号位当作数字位看待。如:-1>>>1结果为2147483647。这个数字应该比较熟悉,看两个输出语句就知道是什么了:

    System.out.println(Integer.toBinaryString(-1>>>1));

    System.out.println(Integer.toBinaryString(Integer.MAX_VALUE));

    输出结果为:

    1111111111111111111111111111111

    1111111111111111111111111111111

    -1>>>1竟然得到了int所能表示的最大整数,


  • 九尾猿
    2017-09-23 22:16:19

    java 中的string 是不可变的,write的时候虽然右移了但是并没有改变 str1本身,而是重新创建了一个右移后的字节,因此不会有你说的问题。不知道这样讲明白么?