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

来源:3-1 RandomAccessFile基本操作

慕粉3536494

2017-09-23 17:29

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

int str1 = 0x7ffffff;

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

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

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

randomAccessFile.write(str1 & 0xff);


写回答 关注

2回答

  • 听卡农的码农
    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本身,而是重新创建了一个右移后的字节,因此不会有你说的问题。不知道这样讲明白么?

    听卡农的码农

    嗯,将str1写进去,不会改变str1的结构。

    2017-09-23 22:56:54

    共 1 条回复 >

文件传输基础——Java IO流

为您介绍IO流的使用,以及对象的序列化和反序列化的内容

133754 学习 · 1030 问题

查看课程

相似问题