В зависимости от того, что вы делаете, вы можете рассматривать long как 64-битное значение, а int как 32-битное значение.Большинство операций esp readInt / Long writeInt / Long работают одинаково, игнорируя сигнатуру.
Можете ли вы привести пример операции, которую вы выполняете с этими числами, и, возможно, мы можем предложить, как сделать то же самое без необходимости расширения типа.
Например, ++, -, +, -, *, ==,! =, << все работают одинаково, независимо от подписи (т.е. дают один и тот же ответ).для >> вы можете заменить >>>
Это функции /,%,>,> =, <, <= и функции печати, которые принимают значения со знаком, но вы должны иметь возможность обойти их (еслиВы используете их). </p>
например
long unsignedA =
long unsignedB =
boolean greater = unsignedA + Long.MIN_VALUE > unsignedB + Long.MIN_VALUE
РЕДАКТИРОВАТЬ: Почему это работает?Частично потому, что в 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.