Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Последние 4 осуществляют циклические сдвиги, их эквивалентов в Java нет.
Integer.compare(a - 0x80000000, b - 0x80000000);, где как бы понятно как всё работает. Мы переходим от чисел в интервале от 0 до 0xffffffff к часлам в интервале от 0x80000000 до 0x7ffffff путём линейного сдвига (мы стартуем с чисел без знака, а результатом является число без знака, но «так можно», потому что в арифметике «с дополнением до двух» сложение и вычитанием одинаково и для чисел без знака и для чисел со знаком) — а после этого уже все сравнения нормально можно производить.0x80000000 — это такое особенное число, что его что вычесть, что прибавить, что про XOR'ить — всё равно. Не знаю, правда, какой смысл в этой обфускации.Не знаю, правда, какой смысл в этой обфускации.
public static int compareUnsigned(int x, int y) {
return compare(x + MIN_VALUE, y + MIN_VALUE);
}
public static long ulongDiv(final long a, final long b) {
return b>1L || b<0 ? (a>>>1)/(b>>>1) : a/b;
}
Беззнаковая арифметика в Java