将两个短裤打包成一个int,处理消极和积极



我正在创建一个类 PackedUnsigned1616,它在一个 int 中存储两个未签名的短裤,以及一个类 PackedSigned1616,在一个 int 中存储两个有符号的短裤。我已经阅读了按位运算,但我仍然对如何处理有符号和无符号以及大于或小于短线范围的值(它们作为两个整数传入)感到困惑。这是我到目前为止得到的:

public final class PackedUnsigned1616 {
public final int field;
private static final int RIGHT = (2 << 15) - 1;
private static final int LEFT = ((2 << 31) - 1) ^ RIGHT;
public PackedUnsigned1616(int left, int right) {
    field = (left << 15) | (right & RIGHT);
}
public int getLeft() {
    return field >> 15;
}
public int getRight() {
    return field & RIGHT;
}

}

这整个概念让我很困惑,所以如果你能稍微阐明一下,那将有很大帮助。

初始化

LEFT 和 RIGHT 的有趣方法。试试这个:

public final class PackedUnsigned1616 {
    public final int field;
    
    private static final int RIGHT = 0xFFFF;
    
    public PackedUnsigned1616(int left, int right) {
        field = (left << 16) | (right & RIGHT);
    }
    
    public int getLeft() {
        return field >>> 16; // >>> operator 0-fills from left
    }
    public int getRight() {
        return field & RIGHT;
    }
}

对于有符号值,我认为您需要做的就是修改getLeft和getRight,如下所示:

    public int getLeft() {
        return field >> 16; // sign bit is significant
    }
    public int getRight() {
        return (short) (field & RIGHT); // gets cast back to signed int
    }

相关内容

  • 没有找到相关文章

最新更新