运算符的优先级在长语句中令人困惑

问题描述 投票:-3回答:1

我使用一个简单的C程序来查找给定日期的天。为此,我写了很多行来计算日期和月份并查找给定年份的种类。冲浪时,我了解了有关查找指定日期的单行代码的信息。代码如下

( d += m < 3 ? y --: y- 2, 23 * m / 9 + d + 4 + y / 4 - y / 100 + y / 400) % 7 ;
// 0 - Sunday, 6 - saturday 

它为所有输入提供了正确的答案,但是我无法理解此表达式中使用的值。

  1. 为什么检查日期和月份的总和少于3。
  2. 为什么将年份减少一,而条件失败则将年份减少2。
  3. 为什么在此表达式中使用数字3、23和9。

我对此语句的运算符优先级感到困惑。谁能解释这是如何工作的?

c operator-precedence
1个回答
0
投票

到目前为止,我发现了: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月时,我们才能在一天之内更正。

© www.soinside.com 2019 - 2024. All rights reserved.