Java:>>> operator vs 0xff
问题描述:
任务是从给定的整数中获取每个字节。这是我看到某处的办法:Java:>>> operator vs 0xff
byte[] bytes = new byte[4];
bytes[0] = (byte) ((id >> 24) & 0xff);
bytes[1] = (byte) ((id >> 16) & 0xff);
bytes[2] = (byte) ((id >> 8) & 0xff);
bytes[3] = (byte) (id & 0xff);
这将导致相同的分手,因为这:
bytes[0] = (byte) (id >>> 24);
bytes[1] = (byte) (id >>> 16);
bytes[2] = (byte) (id >>> 8);
bytes[3] = (byte) (id);
其中,id
是一个整数值,将ALWAYS
是无符号。事实上,我没有看到在第一种方法中需要AND with 0xff
(不是吗?因为我们总是使用最低有效字节)。
这两种方法有什么区别,哪一种更受欢迎?
答
在上面的示例中,您不需要& 0xff
,因为您的示例总是切掉符号扩展数与非符号扩展数不同的位。
这是为什么:当你使用>>
n
位右移了一些,因为一些最显著位被转移上n
位将得到相同的值。 >>>
的行为不同之处仅在于>>>
强制上位n
位为零。无论您使用的班次种类如何,更低的(32-n)
位都是相同的。
没有一个例子的位移量增加了24位,所以如果在底部示例中用>>
代替>>>
,那么较低的八位将是相同的。
因为完全没有必要用0xff
进行掩码,所以我会使用第二个片段,使用>>
或>>>
作为运算符,因为代码更短。
+0
这正是我的想法。非常感谢您的确认。这是一个非常基本的和极其重要的疑问。 – user1071840
“id是一个整数值,并且总是无符号的”int“总是用Java签名。你的意思是说这是积极的吗?不过,这并不重要。两种方法都是相同的 - 即使用'>>'而不是'>>>' – leonbloy
我的意思是,我知道id将保存的值,它永远不会保留负整数。 – user1071840