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);
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);
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
une sorte de calcul des jours d'une année en tenant compte des années bissextiles?
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.
+1 entièrement d'accord. –
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). –
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
Le premier semble devoir faire quelque chose avec le calandar grégorien.
Quel est exactement votre problème avec ceux? –
S'il s'agit de devoirs, indiquez-le comme devoir. – relet
indice: ignore ceux qui se trouvent dans le bloc '/ * * /' –