下面的算法:
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 }
3 回答2k 阅读✓ 已解决
4 回答4.4k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
能被4整除但不能被100整除,或能被400整除的年份即为闰年
这是普通写法:
而year & 3和year % 4一致, year & 15与year % 16一致
如果年份不均匀地除以4,或者如果它不均匀分布,则不是16,但是除以25均匀。这意味着25的每个倍数不是闰年,除非它也是16的倍数。由于16和25没有任何公共因子,所以满足两个条件的唯一时间是当年是16 * 25或400年的倍数