Ответ 1
В зависимости от того, что вы делаете, вы можете просто долго обрабатывать 64-битное значение и int как 32-битное значение. Большинство операций esp readInt/Long writeInt/Long работают одинаково, игнорируя знак.
Можете ли вы привести пример операции, которую вы выполняете на этих числах, и, возможно, мы можем предложить, как сделать то же самое, не расширяя тип.
Например, ++, -, +, -, *, ==,! =, < < все работают одинаково независимо от знака (т.е. дают тот же ответ). для → вы можете подменить → >
Это/,%, > , > =, <, <= и функции печати, которые принимают значения со знаком, но вы должны иметь возможность обойти их (если вы используете их).
например.
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.