Travailler sur les nombres binaires

Résolu
D_A_R_K_O_S Messages postés 124 Statut Membre -  
KX Messages postés 19031 Statut Modérateur -
Bonjours, je débute la programmation en C et j'ai trouver sur internet un code - qui marche - qui décale les bits d'un caractère.
"c<<= 1; décale les bits du caractère c une fois, mais que fait "unsigned char msb = (c & 0x80) >> 7;" ? Qu'est ce que ça signifie ?

CODE :

unsigned char msb = (c & 0x80) >> 7; /* Le bit le plus a gauche */
c <<= 1;
c |= msb;
return c;

Merci d'avance pour vos réponses.

4 réponses

  1. D_A_R_K_O_S Messages postés 124 Statut Membre 7
     
    Merci de la réponse c'est ce que je cherchais ! Mais que ce signifie "0X80" ?
    1
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      C'est l'écriture en base hexadécimale : 0x80 = 128 = 0100 0000
      Du coup en faisant un & seul le 7è bit est conservé (tout le reste étant à 0), donc avec le décalage de 7 bits à droite on ne peut obtenir que deux valeurs : 0 ou 1 (la valeur du 7è bit au départ)
      0
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      KX, le magicien des nombres,
      0x8, c'est 1000 et pas 0100 ;-)
      0
    3. KX Messages postés 19031 Statut Modérateur 3 020
       
      Je suis si rouillé que ça ? 0x80 = 8x16 + 0 = 128 = 2^7 = 0100 0000
      0
    4. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Il faut croire que oui ^^.
      2^7 fait bien 128, il faut donc positionner le 8ème bit et non le 7ème.
      0
    5. KX Messages postés 19031 Statut Modérateur 3 020
       
      Ok. Ok. Je vais mettre un peu d'huile dans mes rouages ;-)
      0
  2. D_A_R_K_O_S Messages postés 124 Statut Membre 7
     
    Ok merci pour ces explications !
    0
  3. Sugel Messages postés 4293 Date d'inscription   Statut Membre Dernière intervention   728
     
    C'est fou ce que je peux me sentir c*n en lisant ce topic x)

    ok, je sors ^^

    ->[]
    0