java - "& 0xFF"和 ">>>"移位有什么作用?

标签 java bit-shift

我试图理解下面的代码。

getKey() 方法返回一个字符串,getDistance() 方法返回一个 double 值。该代码取自一个类,该类用于保存 String(键)和 Double(距离)对。

更具体地说,我不确定进行移动的线条是做什么的。

public void serialize (byte[] outputArray) {

    // write the length of the string out
    byte[] data = getKey().getBytes ();
    for (int i = 0; i < 2; i++) {
      outputArray[i] = (byte) ((data.length >>> ((1 - i) * 8)) & 0xFF);
    }

    // write the key out
    for (int i = 0; i < data.length; i++) {
      outputArray[i + 2] = data[i];   
    }

    // now write the distance out
    long bits = Double.doubleToLongBits (getDistance());
    for (int i = 0; i < 8; i++) {
      outputArray[i + 2 + data.length] = (byte) ((bits >>> ((7 - i) * 8)) & 0xFF);
    }
}

任何帮助将不胜感激。

最佳答案

>>>> 是无符号右移运算符。它也移动了符号位。

& 0xFF 保留位以构成 8 位(字节)值,否则您可能会有一些垃圾。

关于java - "& 0xFF"和 ">>>"移位有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20224088/

相关文章:

c - C 中位级别的显式类型转换

c++ - 无符号 8 位整数的左移操作

c++ - 我如何在 cout 中使用位移位?

java - 记录url导航历史记录

java - UML - 链接类引用

java - 位移位操作 java - 输出到 8 位而不是 9 位

haskell - 您如何在 Haskell 中对 Integer 进行无符号/逻辑移位?

java - 如何在 Android Studio 中导入 java 包

java - getParseObject() 返回 null

java - 如何在 NetBeans 中删除/移动这行代码