我使用一个简单的C程序来查找给定日期的天。为此,我写了很多行来计算日期和月份并查找给定年份的种类。冲浪时,我了解了有关查找指定日期的单行代码的信息。代码如下
( d += m < 3 ? y --: y- 2, 23 * m / 9 + d + 4 + y / 4 - y / 100 + y / 400) % 7 ;
// 0 - Sunday, 6 - saturday
它为所有输入提供了正确的答案,但是我无法理解此表达式中使用的值。
我对此语句的运算符优先级感到困惑。谁能解释这是如何工作的?
到目前为止,我发现了:23 * m / 9
导致
1 2 3
2 5 2
3 7 3
4 10 2
5 12 3
6 15 2
7 17 3
8 20 3
9 23 2
10 25 3
11 28 2
12 30 3
此表达式将每个月的天数[[超过 28天加起来。
表达式y / 4 - y / 100 + y / 400
产生:1995 483 0
1996 484 1
1997 484 1
1998 484 1
1999 484 1
2000 485 2
2001 485 2
结果,每4年增加一天(day年除外)因为每年以365天(mod 7 == 1)将工作日增加1,所以将年数加到这些天。
表达式
d + (m < 3 ? y --: y- 2)
用于校正the年的计算。如果我们有a年,则只有当月份> = 3月时,我们才能在一天之内更正。