提问人:Tom Hudson 提问时间:5/4/2021 最后编辑:Tom Hudson 更新时间:5/5/2021 访问量:66
无法理解不常见的语法 [duplicate]
Cannot understand uncommon syntax [duplicate]
问:
我最近遇到了一个函数,可以计算任何给定日期的星期几。功能如下图所示。
unsigned int getDayOfWeek(const unsigned int day, const unsigned int month, unsigned int year)
{
static unsigned int t[] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 };
year -= month < 3;
return ( year + year/4 - year/100 + year/400 + t[month-1] + day) % 7;
}
我无法理解 的语法。我假设它扩展到,但我仍然无法理解这是做什么的。year -= month < 3
year = year - (month < 3)
我的问题是:这种语法通常做什么,而不仅仅是在这个函数的上下文中?例如。a -= b < 3
先谢谢你。
答:
1赞
Jarod42
5/4/2021
#1
month < 3
是一个布尔表达式。
false
转换为 0true
转换为 1。
您可以将其重写为:
if (month < 3) { year = year - 1; }
评论
0赞
Roger Cigol
5/4/2021
你“可能会把它改写为”——我会说“如果它被写成”,它会更清楚”。除非你试图从一个小处理器(手表中的8位,或者类似的东西?)中榨取每一盎司的性能,否则永远没有必要编写如此晦涩的语法。好的软件都是关于可维护性的,使用晦涩的语法肯定会阻碍这一点。有人可能会争辩说,一个好的编译器会为两个源代码版本生成相同的目标代码
下一个:C-if 语句中多个变量的比较
评论
year
令人惊讶的是,这个任务有效:const
year -= month < 3;