C++ <chrono> 库中的高效闰年判断算法解析
在 C++ <chrono>
库中,有如下判断闰年的算法:
class year
{
private:
short _M_y;
public:
constexpr bool
is_leap() const noexcept
{
return (_M_y & (_M_y % 25 == 0 ? 15 : 3)) == 0;
}
};
根据源代码的注释,总结一下优化思路:
判断闰年的规则是:
- 如果年份能被 4 整除且不能被 100 整除,则是闰年.
- 如果年份能被 100 整除,则还必须能被 400 整除,才是闰年.
先判断能否被 100 整除比其他思路更快,因为它减少了不必要的计算. 参考这里.