Partage
  • Partager sur Facebook
  • Partager sur Twitter

Opérateur << et |

    22 juillet 2006 à 21:16:21

    Bonjour ! Je tente de comprendre un code balancé tout cuit dans la partie vos tutos, qui permet de retourner la valeur d'un pixel d'une surface SDL, le voici :


    Uint32 getPixel(SDL_Surface *surface, int x, int y)
    {
        int bpp = surface->format->BytesPerPixel;
         /* Ici p est l'adresse du pixel que l'on veut connaitre */
         Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;


         switch(bpp) {
         case 1:
             return *p;

         case 2:
             return *(Uint16 *)p;

         case 3:
             if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
                 return p[0] << 16 | p[1] << 8 | p[2];
             else
                 return p[0] | p[1] << 8 | p[2] << 16;

         case 4:
             return *(Uint32 *)p;

         default:
             return 0; /* Ne devrait pas arriver, mais évite les erreurs */
         }
     }


    Donc j'ai pratiquement tout compris, je bute sur la partie 24 bits par pixel ( 3 bytes par pixels ) à savoir :
         case 3:
             if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
                 return p[0] << 16 | p[1] << 8 | p[2];
             else
                 return p[0] | p[1] << 8 | p[2] << 16;


    A quoi servent les opérateurs << et | ?

    Je sais on vas probablement me dire de faire une recherche ( j'ai l'habitude :lol: ) mais c'est pas évident avec pour seuls mots clefs << et | ^^

    Donc si quelqu'in pouvait m'expliquer comment ça marche, je suis prenneur ^^ Merci ! :)
    • Partager sur Facebook
    • Partager sur Twitter
      22 juillet 2006 à 21:26:34

      Les opérateurs << et | sont des opérateurs de manipulation bit à bit.
      Ceci devrait t'aider

      A noter : de par mon expérience personnel, les formats de pixels les plus utilisés sont 32 bpp ( avec les pc actuels on peut se le permettre ), et 8 bpp ( pour pouvoir utiliser SDL_SetPalette ).
      • Partager sur Facebook
      • Partager sur Twitter
        22 juillet 2006 à 21:36:17

        Merci beaucoup ! Je vais aller voir ça !

        Edit : J'ai une petite question cepandant :

        Dans le tuto est utilisé des nombres écrits comme ça 0x.....

        0x sert juste à dire que ce qui suit est de l'hexa-decimal ? Ou bien le zero a une influence ?
        Après tests on dirait que seul le zero est accépté, si toutefois quelqu'un peut m'éclairer :)
        • Partager sur Facebook
        • Partager sur Twitter
          22 juillet 2006 à 22:13:47

          Citation : socomajor


          Dans le tuto est utilisé des nombres écrits comme ça 0x...
          0x sert juste à dire que ce qui suit est de l'hexa-decimal ? Ou bien le zero a une influence ?


          oui... Exemple d'utilisation de 0x suivit d'un nombre en héxadécimal:

          #include <stdio.h>

          int
          main(int argc, char *argv[]){
                  int a = 0x89AF,
                      b = 98;

                  printf("%x %X %d %d\n",a,b,a,b);

                  return 0;
          }


          Qui retourne: 89af 62 35247 98

          Citation


          Après tests on dirait que seul le zero est accépté, si toutefois quelqu'un peut m'éclairer :)


          Comment ca ?
          Tu veux dire que tu as essayé 0x.. 1x.. 2x.. 3x.. ?
          Si c'est ca oui c'est normal:
          0x (ou 0X) est suivit d'hexadécimaux.
          Il y a en plus du décimal et de l'héxadécimal en C, de l'octal (base 8):
          Sous la forme 0.. (0 suivit d'une série de chiffres entres 0 et 7).

          Il me semble que c'est tout pour le C...

          Cordialement,
          • Partager sur Facebook
          • Partager sur Twitter

          Opérateur << et |

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown