下面的算法:function isLeapYear(year) { return !(year & 3 || year & 15 && !(year % 25));}所以,这个逻辑是怎么样的?这事我看一段老代码看到的,实在不理解其中的思路,请指教。
// https://en.wikipedia.org/wiki/Leap_year#Algorithm 253 bool leapyear(int y) 254 { 255 if (y % 4 != 0) 256 return false; 257 else if (y % 100 != 0) 258 return true; 259 else if (y % 400 != 0) 260 return false; 261 return true; 262 }
能被4整除但不能被100整除,或能被400整除的年份即为闰年这是普通写法:
(year % 4 == 0 && year % 100 != 0) || year % 400 ==0
而year & 3和year % 4一致, year & 15与year % 16一致
如果年份不均匀地除以4,或者如果它不均匀分布,则不是16,但是除以25均匀。这意味着25的每个倍数不是闰年,除非它也是16的倍数。由于16和25没有任何公共因子,所以满足两个条件的唯一时间是当年是16 * 25或400年的倍数