任务是从给定的整数中获取每个字节。这是我在某处看到的方法:
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
(不是吗?因为我们总是使用最低有效字节)。
两种方法有什么不同,哪种方法更受欢迎?
答案 0 :(得分:2)
您也不需要上部示例中的& 0xff
,因为您的示例总是会删除符号扩展号与非符号扩展号中不同的位。
原因如下:当您使用n
将数字右移>>
位时,上部n
位将获得与正在移位的数字的最高位相同的值。 >>>
的行为的不同之处仅在于>>>
强制将上n
位置零。无论您使用的班次类型如何,较低的(32-n)
位都是相同的。
您的示例中没有一个移位24位,因此如果您在底部示例中将>>>
替换为>>
,则较低的8位将相同。
由于完全没必要使用0xff
进行屏蔽,因此我会使用>>
或>>>
作为运算符的第二个代码段,因为代码更短。