c++ - 了解每月第一天功能的代码

标签 c++

我正在做练习。它要求我创建月份日历,即当前用户时间的年份。在网上查了一些代码,效果不错,就是看不懂。特别是 year -= month < 3 行.有人可以解释一下吗?

//return the daycode of the first day of month.
int firstDayOfMonth(int month, int year) {
    int dow = 0; 
    int day = 1;

    int t[] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 };
    year -= month  < 3; // I cannot understand this.
    cout<<"This is year "<<year<<endl;
    dow = ( year + year/4 - year/100 + year/400 + t[month-1] + day) % 7;

    return dow;
}

int main()
{
    int a;
    cout<<firstDayOfMonth(2,2018)<<endl;
    return 0;
}

最佳答案

在 C++ 中, bool 值可以隐式转换为整数,使用 false成为0true成为1 . (参见 bool to int conversion。)

所以 year -= month < 3;相当于:

if (month < 3) {
    year -= 1; // true -> 1
} else {
    year -= 0; // false -> 0
}

可以简化为:

if (month < 3) {
    --year;
}

动机是一月和二月(月 12)在任何闰日之前,而其他月份在任何闰日之后,因此将一月和二月视为上一年的年末比较方便,并将闰日添加到整个三月至二月的计算中。

这段代码显然没有针对可读性进行优化。

关于c++ - 了解每月第一天功能的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52939723/

相关文章:

c++ - 如何在 c 中使用 qsort 比较 C++ 字符串?

php - 在源代码中查找 PHP 函数?

c++ - 调试函数包装器

c++ - 在现代 C++ 中优雅地定义多维数组

c++ - 在 C++ 中返回数组引用的语法

c++ - 如何获得几个 chrono::time_points 的平均值

c++ - 如何在 MFC-Dialog 中使用 OnDraw

c++ - 转义 lambda 的示例代码

C++ 列表随机访问

c++ - 在 RAD Studio 2010 中编译 yaml-cpp 时出错