Упаковка двух коротких замыканий в один 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;
}

}

Вся эта концепция меня сильно сбивает, так что, если бы вы могли пролить на это немного света, это бы очень помогло.

7
задан Caleb Jares 8 May 2011 в 20:29
поделиться