判断闰年的逻辑?

下面的算法:
function isLeapYear(year) {
return !(year & 3 || year & 15 && !(year % 25));
}
所以,这个逻辑是怎么样的?
这事我看一段老代码看到的,实在不理解其中的思路,请指教。

阅读 5.2k
2 个回答

能被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年的倍数

// 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 }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题