本帖最后由 jackz007 于 2021-11-25 21:37 编辑 (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)
此表达式总体上是由 || 连接的 A、B 两个子表达式构成,A、B 两个条件中,只要有一个是真,那么,表达式的值就是真,否则,当然就是假了。
条件 A 是 year % 4 == 0 && year % 100 != 0,此条件是说,只要 year 可以被 4 整除,但不可以被 100 整除,那么,条件 A 的值就为真,这样的话 year = 400 的时候 条件 A 的值就是假,而我们希望它是真。所以,又添加了 year % 400 == 0 作为条件 B,专门负责在 year 可以被 400 整除的时候,对 条件 A 产生的结果进行修正。
闰年系统每 400 年是一个周期,如果按每 4 年 1 闰,那么,400 年会有 100 闰,事实上,人类早期采用的历法(儒略历)正是这样计算闰年的,结果产生了较大的累积误差,后来,在 1582年 10 月 5 日(儒略历),直接切换到了 1582 年 10 月 15 日(格里历)。儒略历的 1582 年 10 月 5 日 和 格里历的 1582 年 10 月 15 日是同一天,这样,1582 年 10 月 6 日~14 日这 10 天在日历上根本就没有存在过,被用来消除之前的历法误差了。我们今天使用的历法正是格里历。格里历每 400 年 有 97 闰,所以,在 year % 4 == 0 每 400 年 100 闰的基础上,先扣除 4 个 整 100 的年,于是,闰年的条件表达为 year % 4 == 0 && year % 100 != 0,是的,如你所见,&& year % 100 != 0 的作用就是从 100 个闰年中,扣除 4 个整 100 的年份,这样,每 400 年就有 96 闰,还差 1 闰,再加上 400 年周期的最后一年,凑成每 400 年 97 闰,于是,表达式就变成了 (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)。
所以,记住一个常识,&& 运算符使条件苛刻,是在做减法,|| 运算符使条件宽松,是在做加法。 |