Informatică, întrebare adresată de greeneyes27, 8 ani în urmă

Daca mi poate explica si mie cineva codul asta mai explicit

Anexe:

Răspunsuri la întrebare

Răspuns de VxF
5

Răspuns:

Numără cifrele impare dintr-un număr.

Explicație:

Sperând ca partea cu împărțirea am clarificat în întrebările precedente, focusez pe ce mai este interesant, și anume expresia (n % 10) & 1.

& este operatorul și (and) la nivel de bit. Deci ca să-i înţelegem funcţionarea trebuie să convertim operanzii în sistem binar.

\begin{array}{rr}baza~10&baza~2\\0&0\\1&1\\2&10\\3&11\\4&100\\5&101\\6&110\\7&111\\8&1000\\9&1001\end{array}

Putem observa o regulă: în baza 2 ultima cifră a numerelor pare este întotdeauna 0, iar a numerelor impare întotdeauna 1.

Operatorul & parcurge cei doi operanzi și pe poziţiile unde în baza 2 ambii operanzi au 1, va scrie 1, în rest 0:

\begin{array}{lrrrrr}&baza~10&baza~2\\operand~stang&42&101010\\operand~drept&25&11001\\stang~\&~drept&8&1000\end{array}

Deci dacă unul dintre operanzi este 1, rezultatul operatorului & va fi 1 dacă celălalt operand în baza 2 are ultima cifră 1, adică este impar.

De notat că expresia folosită în acel cod este inutil complicată de folosirea operatorului %. Dacă ultima cifră a unui număr este impar, tot numărul este impar, deci e inutil să extragem ultima cifră. Adică în loc de (n % 10) & 1 putea fi scris doar n & 1.

Alte întrebări interesante