Binaire en C

Fermé
florence - 17 déc. 2004 à 19:45
 Jolkdarr - 18 déc. 2004 à 01:03
Bonjour , soit les deux ennoncés suivant:

A.Étant donné la déclaration suivante:

unsigned int n = 53;

Que vaut l’expression (exprimée en notation décimale) n >> 4?

Réponse: 3


B.Que vaut la variable n après son initialisation?

int n = (4 & 2) ? 2 % 4 : 2 | 4;

Réponse: 6

3 réponses

J'aimerai savoir comment on fait pour trouver la réponseA=3 et B=6
je comprends pas comment on arrive a ces résultats.
est ce que quelqu'un aurai la gentillesse de me l'expliquer S.V.P
Merci
0
blurk Messages postés 486 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 15 mars 2009 160
17 déc. 2004 à 20:53
hello

1/
un décalage vers la droite équivaut à diviser par 2, ici on divise donc par 2^4 soit 16
53 est divisé par 16 et le résultat est 3, peu importe le reste, dans les nombres entiers
tout ce qui est compris entre 48>>4 et 63>>4 vaudra 3

on utilise les décalages de bits le plus souvent pour manipuler
des valeurs 32 bits avec des octets 8 bits (enfin ce genre de choses)

2/ si (4 & 2) vaut autre chose que zéro
(ce qui est faux: 0100 & 0010 = 0000)
alors n= 2 modulo 4, soit 0 (2 divisé par 4, il reste 0)
sinon,
n= 2|4 soit (0010 | 0100 =0110) et 0110 vaut 6 en décimal

La condition de ce test sera toujours fausse, et le résultat sera donc toujours 6
ce test n'a donc pas d'autre intérêt que d'être un cas d'école.
(ah làlà les trucs à la con qu'on appelle cas d'école)

cordialement
a+
¤
0
De manière plus concise :

A)
53 = 110101 (base 2)
Un décalage de 4 donne 11, c'est-à-dire 3.


Astuce : un décalage de 4 bits correspond à un décalage d'un caractère hexadécimal.
Ici :
53 = 35 (base 16)
un décalage d'un caractère hexa laisse directement 3.

B) voir Blurk.
Rappel : l'expression
x ? y :  z 

est équivalente à :
if (x)
    y;
else
    z;
0