Partage
  • Partager sur Facebook
  • Partager sur Twitter

condition if bizarre

    18 juin 2008 à 22:45:22

    bomjours je suis tombe sur une formule assez bizzare dans un if .

    par exemple :

    int a;
    cin>>a;
    
    if(a&~077){        //je n'ai pas compris cet ligne 
       //ici execute une instruction 
    }
    


    voila donc l'argument dans le if il veut dire quoi ? car j'ai tourne le probleme dans tous les sens je n'ai pas compris merci de m'aider , bonne soiree .

    • Partager sur Facebook
    • Partager sur Twitter
      18 juin 2008 à 22:59:56

      T'as qu'à faire des tests, je croix que la condition est vrai quand le 2ème nombre est le double du 1er nombre.
      Par contre c'est bizarre quand je change le 077 en exemple 080 le debugueur me répond :
      chiffre '8' non conforme pour la base '8'
      • Partager sur Facebook
      • Partager sur Twitter
        18 juin 2008 à 23:06:56

        Une façon tordue d'écrire 0< ou >=64 ?
        - ~, c'est l'inversion binaire (à vérifier, c'est le seul élément sur lequel j'ai un doute)
        - 077 c'est de l'octal, soit 0x3f, ou 63, ou 111111 (binaire)
        - &, c'est le ET binaire.

        Donc, on teste si ton nombre et 11....111000000 ont des bits en commun. (Le nombre de '.' dépend de la capacité de int sur ta machine).
        J'interprète donc le bouzin comme plus grand que 64, ou négatif.


        EDIT: s/du/de l'/ ; s/64/63/
        • Partager sur Facebook
        • Partager sur Twitter
        C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
          18 juin 2008 à 23:10:21

          A ouai je voix, sont fout c'est programmeur o_O .
          • Partager sur Facebook
          • Partager sur Twitter
            18 juin 2008 à 23:12:36

            Oui! Le genre d'obsfuscation qui, aujourd'hui, mérite des baffes.
            • Partager sur Facebook
            • Partager sur Twitter
            C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
              18 juin 2008 à 23:13:48

              C'est bizarre quand même quand je mes :
              if(20&~40)
              {
              	cout << "ok\n";
              }
              

              Ça me marque : "ok".
              • Partager sur Facebook
              • Partager sur Twitter
                18 juin 2008 à 23:15:11

                (oups, j'ai utilisé "citer" au lieu "d'éditer" :euh: )

                EDIT: réponse à 20&~40.
                077 a une propriété très particulière: il sature les 6 derniers bits. Grâce à cette propriété, le test se traduit en >=64.

                Ici, tu testes s'il y a des bits communs avec NON-00..00101000, soit avec 11..111010111. Ce qui est le cas de 20 (00..0010100).
                • Partager sur Facebook
                • Partager sur Twitter
                C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                  19 juin 2008 à 8:11:33

                  Attention, c'est de l'octal, pas du décimal !

                  Ce genre de codes franchement....
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
                    19 juin 2008 à 14:09:26

                    bonjour

                    >chiffre '8' non conforme pour la base '8'
                    En base 8 il y a 8 chiffres : 0 1 2 3 4 5 6 7
                    • Partager sur Facebook
                    • Partager sur Twitter
                      19 juin 2008 à 21:38:15

                      Eclyps tout ce qui n'est pas 0 est vrai. Alors dès qu'un des 32 bits vaut 1 c'est vrai.

                      Ici le but a été analysé par lmghs :

                      a & ~077 == a >= 64
                      


                      Si tu ne comprend pas plus oubli ça... ce n'est pas important.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        19 juin 2008 à 21:52:41

                        Pas la pêne de vous acharner je suis pas si con j'ai compris -_-' .
                        • Partager sur Facebook
                        • Partager sur Twitter
                          20 juin 2008 à 1:07:25

                          Attention, pas exactement. Il n'y a égalité que si l'on réduit l'obscure expression à un booléen -- ce qui se passe dans un if.

                          Prise comme un int, elle renvoie le plus grand multiple de 64 qui soit inférieur au nombre de départ.
                          • Partager sur Facebook
                          • Partager sur Twitter
                          C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.

                          condition if bizarre

                          × 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