Проверка високосного года с использованием побитовых операторов (потрясающая скорость)

Кто-то из JSPerf сбросил удивительно быструю реализацию для проверки високосных лет календаря ISO (ссылка:Манипуляции с нечетными битами):

function isLeapYear(year) {
  return !(year & 3 || year & 15 && !(year % 25));
}

Используя Node.js, я быстро сравнил ее с двумя другими -реализации лайнера, которые я знаю.

function isLeapClassic(y) { return (y % 4 == 0) && !(y % 100 == 0) || (y % 400 == 0); }
function isLeapXOR(y) { return (y % 4 == 0) ^ (y % 100 == 0) ^ (y % 400 == 0); }
function isLeapBitwise(y) { return !(y & 3 || y & 15 && !(y % 25)); }

//quick'n'dirty test on a small range!
//works with negative integers too
for (var i = 1900; i <= 2100; i++) {
    console.log(
        "year = %d,\t%d%d%d",
        i,
        isLeapClassic(i),
        isLeapXOR(i),
        isLeapBitwise(i)
    );
}

Это работает, как и ожидалось, но моя проблема в том, что я не могу понять, как это сделать. Я знаю ((a % b) == (a & (b-1)), когда b является степенью двойки, поэтому (year % 4) == (year & 3), но year & 15 && !(year % 25)довольно сложно понять. Может кто-нибудь объяснить мне, как это работает? Любая ссылка об этой реализации?

16
задан River 18 October 2017 в 03:22
поделиться