2010-08-22 3 views
2

Comment analyser ces deux lignes de code suivantes?ayant des difficultés à lire deux lignes de code

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

et

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

Quel est exactement votre problème avec ceux? –

+0

S'il s'agit de devoirs, indiquez-le comme devoir. – relet

+0

indice: ignore ceux qui se trouvent dans le bloc '/ * * /' –

Répondre

0

Voici comment l'analyser

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; 
} 

Notez que t1 et t2, peut être évalué dans un ordre quelconque t3 sera évaluée après t1 et t2 t4 peut être évaluée avant que soit t1 ou t2

Cela exige une bonne connaissance avec

opérateur associativité

opérateur priorité

séquence indique

Laissant l'autre également à analyser sur des lignes similaires

0

une sorte de calcul des jours d'une année en tenant compte des années bissextiles?

11

Le premier cherche les années bissextiles et ajoute 1 à w si c'est le cas. (tous les quatre ans sauf les divisibles par 100 sauf les divisibles par 400.)

La seconde recherche des mois de 31 jours. (Tous les mois sauf les mois supérieurs à 8, qui se répètent un mois.)

Quiconque a écrit ce code essaye simplement d'être déroutant et fantaisiste. Vous devriez le réécrire pour qu'il soit plus lisible.

+0

+1 entièrement d'accord. –

+0

On dirait que le second essaie d'obtenir le nombre de jours dans un mois (w sera augmenté de 30 tous les autres mois, y compris février). –

+0

Il semble y avoir un motif que beaucoup de programmes C/C++ sont écrits d'une manière très compliquée comme ceci. Est-ce habituel dans l'industrie? – user297850

1

Le premier semble devoir faire quelque chose avec le calandar grégorien.

Questions connexes