1

任务是从给定整数中获取每个字节。这是我在某处看到的方法:

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第一种方法没有必要(不是吗?因为我们总是使用最低有效字节)。

这两种方法有什么区别吗?哪一种更受欢迎?

4

1 回答 1

2

您也不需要& 0xff上面示例中的 ,因为您的示例始终会删除符号扩展与非符号扩展数字中不同的位。

n原因如下:当您使用将数字右移一位时>>n高位将获得与被移动数字的最高有效位相同的值。的行为>>>不同之处仅在于>>>将高位强制n为零。(32-n)无论您使用哪种移位,低位都是相同的。

您的示例都不会移动更多 24 位,因此如果您在底部示例中>>>替换为,则低八位将是相同的。>>

由于完全没有必要用 屏蔽0xff,我会使用您的第二个片段使用>>>>>作为运算符,因为代码更短。

于 2013-10-03T01:07:34.530 回答