Unsigned Int в Java

Я пытаюсь реализовать существующий сетевой протокол, который сильно использует Unsigned datatypes, которые не поддерживаются Java. То, что я сейчас делаю для каждого типа данных, выбрал следующий более крупный, чтобы беззнаковое число могло вписаться в положительную область, а затем использовать смещение байта, чтобы получить желаемый эффект. Поскольку это довольно распространенная ошибка и для unsigned long onward, я должен использовать BigInteger, который намного тяжелее расширенных типов, мне было интересно, нет ли лучшего способа достичь этого?

В зависимости от того, что вы делаете, вы можете просто долго обрабатывать 64-битное значение и int как 32-битное значение. Большинство операций esp readInt / Long writeInt / Long работают одинаково, игнорируя знак.

Можете ли вы привести пример операции, которую вы выполняете на этих цифрах, и, возможно, мы можем предложить, как сделать то же самое, не расширяя тип.

Например, ++, -, +, -, *, ==,! =, << все работают одинаково независимо от signess (т. Е. Дают тот же ответ). для >> вы можете подменить >>>

Это /,%,>,> =, <, <= и функции печати, которые принимают подписанные значения, но вы должны иметь возможность обойти их (если вы их используете).

например

long unsignedA = long unsignedB = boolean greater = unsignedA + Long.MIN_VALUE > unsignedB + Long.MIN_VALUE 

EDIT: Почему это работает? Отчасти потому, что в java нет исключений переполнения / недоиспользования.

например

 byte unsignedA = 0; unsignedA--; // unsignedA == FF, is this -1 or 255? Java assumes the former but you assume the later byte unsignedB = unsignedA * unsignedA; // unsignedB is -1 * -1 = 1 or (byte) (255*255) = (byte) 65525 = 1.