2010-08-22 105 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東西。