2010-08-22 108 views
2

两行如何分析这些代码以下两行?困难阅读的代码

w += /* 28 + */ y % 4 == 0 && (y % 100 || y % 400 ==0); 

w += 30 + (i % 2^i >= 8); 
+0

究竟什么是你的问题与那些? – 2010-08-22 13:25:10

+0

如果是作业,请将其标记为家庭作业。 – relet 2010-08-22 13:26:39

+0

提示:忽略那些'/ * * /'块 – 2010-08-22 13:27:51

回答

0

下面是如何分析它

int main(){ 
    int w = 0; 
    int y = 400; 

    w += /* 28 + */ y % 4 == 0 && (y % 100 || y % 400 ==0); 

    int t1 = y % 100; 
    int t2 = y % 400; 

    int t3 = t1 | t2; 

    bool t4 = (y % 4); 

    int w1 = t3 & t4; 
} 

注意,t1和t2,可以以任意顺序进行评估 T3将T1和T2后进行评估 T4可以T1或T2

之前评估

这需要

运营商关联

熟悉

运算符优先级

序列指出

离开另一个也被类似的路线分析

0

某种考虑闰年一年的天数计算的?

11

第一个查找闰年,并增加了1到W,如果它是。 (每四个全年除那些由100整除的人除外被400整除)

第二个查找月是31天。 (除个月超过8个,其中重复1个月更大的每一个每个月)。

谁写这段代码只是想混乱和幻想。你应该重写它更可读。

+0

+1完全同意。 – 2010-08-22 13:30:06

+0

它看起来像第二个实际上是试图让在一个月的天数(W将在所有其他月份,包括二月增加30)。 – 2010-08-22 15:35:11

+0

似乎有一种模式,大量的C/C++程序都是用这样的方式很复杂的。这在行业中通常如此吗? – user297850 2010-08-22 16:03:04

1

第一个,似乎都与公历calandar东西。