Partage
  • Partager sur Facebook
  • Partager sur Twitter

Viariables en mode «binaire» ? XOR ?

Sujet résolu
    24 août 2006 à 12:44:22

    Bonjour à tous ! Je voulais savoir si on pouvait manipuler des variables en «mode binaire», par exemple
    char maVariable = 10011010;

    Ou comment appliquer un xor (ou exclusif) sur une variable comme un char si on ne peut pas manipuler leur valeur binaire ? Et si on peut, il y a une fonction prédéfinie ? (ça doit hyper simple de la créer, mais c'est une question de propreté: si la fonction existe déjà, autant l'utiliser ;) )

    Merci :)
    • Partager sur Facebook
    • Partager sur Twitter
      24 août 2006 à 12:55:55

      je me demande si tu ne mélange pas quelques trucs; les bases (par exemple la base 2, que tu appelles "mode binaire") ne sont que des façons de représenter les nombres, la seule différence est donc visuelle, dans ton code source, mais la valeur "5" en décimal et la valeur "5" en binaire (qui s'écrit "101") sont rigoureusement égales.

      pour écrire un nombre en représentation binaire, il suffit de le faire préceder par "0b", ce qui donne "char maVariable = 0b10011010;" dans ton cas (enfin à partir de je-ne-sais quelle extension du C seulement, sinon tu peux écrire en hexadecimal avec 0x, ça sera toujours plus facile pour s'imaginer la représentation binaire qu'à partir d'un nombre en décimal).

      et pour ce qui est des "fonctions", il s'agit en fait d'operateurs : &, | et ^ respectivement pour AND, OR et XOR.
      • Partager sur Facebook
      • Partager sur Twitter
        24 août 2006 à 13:05:13

        J'avais lu quelquepart que l'écriture 0b... n'était pas standard ? Oui, je sais que les bases ne sont qu'une façon différente d'écrire, mais c'est plus pratique d'appliquer un XOR par exemple sur un nombre en binaire qu'en décimal ;) Je connaissais ses symboles (&, | et ^) pour php, je ne savais pas qu'ils existaient aussi en C, merci beaucoup ! :D
        • Partager sur Facebook
        • Partager sur Twitter
          24 août 2006 à 13:07:51

          Citation : revan

          J'avais lu quelquepart que l'écriture 0b... n'était pas standard ?


          Si on veut, dans le sens où elle n'a été ajoutée qu'à partir d'une certaine extension du C (mais bon si tu utilises GCC sans switch pour contraindre une certaine norme par exemple, aucun problème).
          • Partager sur Facebook
          • Partager sur Twitter
            24 août 2006 à 13:11:59

            Ou alors je peux les redéfinir non ? Ou ça n'est vraiment pas la peine ?
            • Partager sur Facebook
            • Partager sur Twitter
              24 août 2006 à 13:16:13

              heu "les" redéfinir ? quoi ?
              • Partager sur Facebook
              • Partager sur Twitter
                24 août 2006 à 13:26:18

                0b00000000
                0b00000001
                0b00000010
                ...
                Ça ne sont pas des defines ?

                #define 0b00000110 6


                Je le voyais comme ça... :euh:
                • Partager sur Facebook
                • Partager sur Twitter
                  24 août 2006 à 14:26:03

                  Citation : revan

                  0b00000000
                  0b00000001
                  0b00000010
                  ...
                  Ça ne sont pas des defines ?

                  #define 0b00000110 6



                  Je le voyais comme ça... :euh:



                  Certainement pas. En revanche tu avais raison sur le fait qu' 0b n'était pas standard (en tout cas pas c90). Mais je ne vois pas le problème d'appliquer les opérateurs de traitement des bits (&, |, ^, <<, >>) à des nombres écrits en base 10 ou en base 16...

                  1 << 2 = 0001 << 2 = 0100 = 4


                  De plus, décaler les bits d'un nombre x vers la gauche de y rangs revient à faire x * 2ey, et x / 2ey si l'on déclae vers la droite.

                  Ainsi on peut faire directement par exemple :

                  16 >> 3 = 16 / 2e3 = 16 / 8 = 2
                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 août 2006 à 14:27:30

                    pour tous les chiffres possibles ? même en s'arrêtant aux long, ça fait 4 milliards et qqes de #defines, c'est un peu beaucoup :D (sans compter le fait qu'un #define ne peut pas commencer par un chiffre)

                    plus serieusement, non ce ne sont pas des defines, le compilateur sait simplement gérer d'autres représentations de nombres que la représentation décimale : binaire (0b), octale (0), et hexadecimale (0h).

                    (cross post)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      24 août 2006 à 14:33:02

                      c'est 0x et non 0h pour l'héxa
                      • Partager sur Facebook
                      • Partager sur Twitter
                        24 août 2006 à 14:33:34

                        Citation : Vertyos

                        plus serieusement, non ce ne sont pas des defines, le compilateur sait simplement gérer d'autres représentations de nombres que la représentation décimale : binaire (0b), octale (0), et hexadecimale (0h).



                        0h ? 0x ou 0X plutôt ;)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          24 août 2006 à 14:35:20

                          heu oui, mauvais langage ^^ (surtout que j'avais pas fait la confusion au 2eme post... bref ^^)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            24 août 2006 à 15:01:03

                            On ne peut pas écrire le nombre directement en base 2 (du moins en standard) mais par contre on peut très bien réaliser des opérations binaires sur des entiers. Attention, prendre des entiers non signés pour ne pas avoir de surprise !

                            L'opérateur XOR est défini par '^' : a ^ b
                            • Partager sur Facebook
                            • Partager sur Twitter
                              24 août 2006 à 15:20:00

                              Ah ok ! Merci tout le monde !
                              • Partager sur Facebook
                              • Partager sur Twitter

                              Viariables en mode «binaire» ? XOR ?

                              × 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