👤
a fost răspuns

Care din valorile de mai jos nu poate fi returnata la evaluarea expresiei n|1 (n intreg) C/C++

a)7
b)5
c)3
d)6
e)1


Răspuns :

Răspuns:

d) 6

Explicație:

Daca o luam matematic:

[tex]n \mid 1 = \begin{cases}n + 1, \quad\text{daca } n \% 2 = 0\\ \\ n, \quad \text{daca } n \% 2 = 1\end{cases}[/tex]

n | 1 inseamna primul numar impar, mai mare sau egal cu n.

Deoarece 6 este par, el este "intrusul"

Oricum am alege un n, acesta are si o scriere in baza 2.

Deoarece 1 este constant, sa il scriem valoarea in baza 2(pe 8 biti):

0000 0001

Operatorul sau pe biti lucreaza astfel:

Bitul din rezultat va fi "pornit" daca cel putin unul dintre bitii de la operanzi este 1.

Astfel avem doar 2 cazuri pentru n:

Daca n are ultimul bit = 1, atunci n|1 nu va returna n(deoarece ultimul bit este 1, nu se mai schimba).

Daca n are ultimul bit = 0, atunci expresia "n | 1" va returna n + 1 (ultimul bit din n = 1).

Deoarece n | 1 are intotdeauna ultimul bit = 1, atunci n|1 trebuie intotdeauna sa fie impar, deci valoarea 6 nu poate fi returnata de acea expresie.