Doute sur le résultat d'une opération (arduino ~ C++)
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Doute sur le résultat d'une opération (arduino ~ C++)



  1. #1
    Shain

    Doute sur le résultat d'une opération (arduino ~ C++)


    ------

    Bonjour,

    J'ai récupéré un bout de code contenant les instructions suivantes :

    Code:
        if ((ow_reg == 0x0E) || (ow_reg == 0x0F)) {
          int received = _receive_byte();
          if (received >= 0) { 
            reg[ow_reg] = received;
          }
        }
        else if (ow_reg & 0x08) {
          _send_byte(reg[ow_reg]); 
        } else {
          int received = _receive_byte();
          if (received >= 0) { 
            reg[ow_reg] = received;
          }
        }
    ow_reg est une valeur qui peut être égale à :
    0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0E et 0x0F

    J'ai un doute sur l'effet de l'instruction : "if ((ow_reg == 0x0E) || (ow_reg == 0x0F))" dans le cas où ow_reg = 0x08 (par exemple).
    Est-ce que dans ce cas (où ow_reg = 0x08), la condition est quand même respectée et le code dans le if est exécuté ou pas ?
    En théorie je pense que la condition n'est pas respecté car en raisonnant en décimal 8 est différent de 15 mais je préfère demander au cas où..

    Merci

    -----
    Dernière modification par Shain ; 10/07/2013 à 10h51.

  2. #2
    Dlzlogic

    Re : Doute sur le résultat d'une opération (arduino ~ C++)

    Bonjour,
    En C, l'opérateur de comparaison '==' renvoie true (ie. est vrai) si les deux valeurs sont égales, par exemple (15 == 0xE) est vrai, et (15 == 0x8) est faux.
    L'opérateur '&' est un opérateur type AND bit à bit par exemple 1000 & 1111 donne 1000 donc pas nul ; 0100 & 1111 donne 0100 donc pas nul ; 1000 & 0111 donne 0000 donc nul.
    Intéressez-vous aussi à l'opérateur '|' cad 'OU'.
    En fait il faut bien distinguer les opérateurs de comparaison '==' '!=' des opérateurs d'opérations booléennes, bit à bit '&', '|', '!' qui sont resp. AND, OR, NOT.

  3. #3
    Shain

    Re : Doute sur le résultat d'une opération (arduino ~ C++)

    Bonjour Dlzlogic,

    Merci pour votre réponse.

    Encore une question sur un autre doute, comme vous l'avez expliqué le résultat de 0x0100 == 0x1110 est non nul, pouvez-vous me redire quel est le comportement du if dans ce cas.
    C'est à dire le code du if est-il exécuté dès que la condition est non nulle et positive (> 0) ?

  4. #4
    Dlzlogic

    Re : Doute sur le résultat d'une opération (arduino ~ C++)

    Citation Envoyé par Shain Voir le message
    Bonjour Dlzlogic,

    Merci pour votre réponse.

    Encore une question sur un autre doute, comme vous l'avez expliqué le résultat de 0x0100 == 0x1110 est non nul, pouvez-vous me redire quel est le comportement du if dans ce cas.
    C'est à dire le code du if est-il exécuté dès que la condition est non nulle et positive (> 0) ?
    Non c'est pas ça.
    Les opérateurs '==', '!=', '>', '<', '<=' etc. sont de opérateurs de test. Le résultat est VRAI ou FAUX, true ou false.
    Les opérateurs '&', '|', '!' sont des opérateurs arithmétiques de l'algèbre de Boole
    Le test (0x0100 == 0x1110) est faux. ces deux valeurs ne sont pas égales.
    L'opération 0x0100 & 0x1110 retourne 0x0100. Seul le 2è bit existe (cad =1 et non 0) dans les 2 nombres.

    Si je fais if ( 0x0100 == 0x1110) le résultat est faux, donc l'instruction ou le groupe d'instructions qui suit ne s’exécutera pas.

    Si je fais if( 0x0100 & 0x1110), la valeur qui se trouve à l'intérieur de la parenthèse est non nulle, donc le test est positif, donc l'instruction suivante sera exécutée.

    En C une valeur non nulle est considérée comme vraie dans un if. Une valeur nulle sera considérée FAUX.
    Il est indispensable de comprendre qu'une variable booléenne testée par un if est soit VRAI soit FAUX.
    Les opérateurs bit à bit servent à faire de opérations.

    Il est à remarquer que l'utilisation de '&' est très voisine de l'opérateur '*' de l'arithmétique décimale, '|' très voisin de '+', et '!' très voisin de '-'.

    Si vous n'avez jamais fait d'algèbre de Boole, il est normal que ça vous déroute un peu, mais vous vous y ferez très vite. Par contre, il me parait indispensable que ça devienne parfaitement clair pour vous.

  5. A voir en vidéo sur Futura
  6. #5
    Shain

    Re : Doute sur le résultat d'une opération (arduino ~ C++)

    C'est clair merci, pardon pour le message précédent, en fait j'avais mal lu votre premier message alors que c'était déjà clair..

    Bonne soirée

Discussions similaires

  1. Cout d'une opération sur la moelle épinière
    Par snakes1993 dans le forum Actualités
    Réponses: 4
    Dernier message: 30/09/2010, 20h58
  2. Le résultat d'une électrolyse
    Par invite2268ade4 dans le forum Chimie
    Réponses: 6
    Dernier message: 25/08/2010, 14h17
  3. gros doute sur la somme d'une suite
    Par jonh35 dans le forum Mathématiques du collège et du lycée
    Réponses: 1
    Dernier message: 03/05/2009, 22h12
  4. resultat d'une conversion A/N
    Par solid_sneak06 dans le forum Électronique
    Réponses: 21
    Dernier message: 21/05/2006, 14h16