为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

int str1 = 0x7ffffff;

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

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

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

randomAccessFile.write(str1 & 0xff);


正在回答

2 回答

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

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

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

输出结果为:

1111111111111111111111111111111

1111111111111111111111111111111

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


0 回复 有任何疑惑可以回复我~

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

1 回复 有任何疑惑可以回复我~
#1

听卡农的码农

嗯,将str1写进去,不会改变str1的结构。
2017-09-23 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信