Предположительно, вы имеете в виду реализовать как класс, который использует больший тип данных и проверки границ, как это:
public class Unsigned24 {
private static final MAX_UNSIGNED24 = Math.pow(2, 24) - 1;
private static final MIN_UNSIGNED24 = 0;
private final int value;
public Unsigned24(int value) {
if (value > MAX_UNSIGNED24 || value < MIN_UNSIGNED24)
throw new IllegalArgumentException("value out of bounds: " + value);
this.value = value;
}
public int getValue() {
return value;
}
// ... other methods, such as equals(), comparison, addition, subtraction, etc.
}
Это будет работать, но может быть не стоит свеч. Кроме того, на самом деле это не занимает всего 24 бита памяти, а скорее 32 плюс накладные расходы для объекта.
Это действительно зависит от ваших целей. Почему вы хотите 24-битное целое число.
Это просто потому, что у вас есть ограничения-ограничения на значения? Если это так, вы можете сделать что-то вроде выше.
Это потому, что у вас их много, и вы хотите сохранить память? Если это так, вам может понадобиться создать класс, который абстрагирует массив из 24-битных целых чисел и внутренне сохраняет их последовательно в байтовом массиве.
Это потому, что вы взаимодействуете с каким-либо аппаратным или сетевым интерфейсом, который ожидает ровно 24 бит? В этом случае вы можете посмотреть классы java.nio.
Сколько из них будет активным в вашем приложении в любой момент времени? Если вы не говорите о количестве в миллионном порядке, вам лучше использовать целое число и «тратить» 8 бит на датуту, вместо того, чтобы пытаться оптимизировать, где вам не нужно. –
@Anon, +1. Я бы поддержал это, если бы это был ответ. – aioobe
Спасибо Anon. Я пишу индексатор для простой поисковой системы для рабочего стола. Поэтому, используя 24-разрядные целые числа без знака вместо 32-битных целых чисел, я надеюсь, что смогу сэкономить некоторое пространство. –