IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

complément à 2


Sujet :

C

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par défaut complément à 2
    Bonjour,
    existe-il une fonction permettant de réaliser directement un complément à 2?
    Merci.

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par sandball22
    Bonjour,
    existe-il une fonction permettant de réaliser directement un complément à 2?
    Merci.

    Jc

    [EDIT] en effet, il faut un +1 [/EDIT]

  3. #3
    Membre émérite
    Avatar de Freed0
    Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    635
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 635
    Par défaut
    Citation Envoyé par fearyourself
    C'est le complément à 1 ça, non ?

    Pour moi, ce serait plutôt :


  4. #4
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par Freed0
    C'est le complément à 1 ça, non ?

    Pour moi, ce serait plutôt :

    Exact, c'est corrigé

    Jc

  5. #5
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Il vaut mieux eviter de faire des manipulations de bits avec des entiers signes.

    Et le complement a 2 s'ecrit alors - en C.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par défaut
    Cela ne marche pas. J'obtiens des chiffres erronés.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for(i=0;i<24;i++)
    		{
    			phas[i] = phase[i];
    			printf("%d",phas[i]);
    			phas[i] = ~phas[i]+1;
    			printf("%d",phas[i]);
                    }
    En effet, j'utilise ce code. Dans cette boucle for, je récupère un tableau de binaires que je mets dans le tableau phas[i].

    Voila ce que j'obtient en simulant : 02551254125402551254025502550255025502551.......

  7. #7
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Citation Envoyé par sandball22
    Cela ne marche pas. J'obtiens des chiffres erronés.
    Voila ce que j'obtient en simulant : 02551254125402551254025502550255025502551.......
    S'il vous plaît, ajoutez des espaces entre les éléments...

  8. #8
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Ce code affiche le complément à deux de chaque élément du tableau sans erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #include <stdio.h>
    #include <stdlib.h>
     
    #define ARRAY_SIZE(tab) (sizeof (tab)/sizeof *(tab))
     
     
    int main(void)
    {
        int i;
        unsigned int tableau[10];
     
        for (i = 0; i < ARRAY_SIZE(tableau); ++i)
        {
            tableau[i] = i;
        }
     
        for (i = 0; i < ARRAY_SIZE(tableau); ++i)
        {
            printf("%d: Le complément à 2 de %x est %x\n", i, tableau[i], ~tableau[i] + 1);
        }
     
        return EXIT_SUCCESS;
    }
    qui affiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    0: Le complément à 2 de 0 est 0
    1: Le complément à 2 de 1 est ffffffff
    2: Le complément à 2 de 2 est fffffffe
    3: Le complément à 2 de 3 est fffffffd
    4: Le complément à 2 de 4 est fffffffc
    5: Le complément à 2 de 5 est fffffffb
    6: Le complément à 2 de 6 est fffffffa
    7: Le complément à 2 de 7 est fffffff9
    8: Le complément à 2 de 8 est fffffff8
    9: Le complément à 2 de 9 est fffffff7
    Je ne sais pas de quel type sont les éléments de ton tableau phas, mais comme l'a signalé Jean-Marc Bourguet, il vaut mieux se limiter aux entiers non-signés pour effectuer des opérations bit par bit.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par défaut
    voici mon programme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            .....
     
            int k;
     
             k = 101;
    	 k = (~k);
    	 printf("\nk%d",k);
    Pourquoi j'obtiens : -102 au lieu de 011????

  10. #10
    Membre expérimenté
    Inscrit en
    Décembre 2003
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 272
    Par défaut
    Où est le problème ? Vu que :
    -x = ~x +1
    c'est assez cohérent...

  11. #11
    Membre expérimenté
    Inscrit en
    Décembre 2003
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 272
    Par défaut
    OK compris :
    101 vaut "cent un" et pas "cinq", c'est une écriture décimale et pas binaire.

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par défaut
    Désolé, mais je vois pas pourquoi cela est cohérent.

    j'ai la séquence binaire suivante 101 au départ, après complément à 2 , j'orais 010+1=011 ce qui fait 3, donc au final il s'agit de -3.

    Pourquoi -102?

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par défaut
    Comment faire alors ?

  14. #14
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par sandball22
    voici mon programme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            .....
     
            int k;
     
             k = 101;
    	 k = (~k);
    	 printf("\nk%d",k);
    Pourquoi j'obtiens : -102 au lieu de 011????
    Parce ce que ta machine représente les nombre négatifs en complément à 2. Donc, si tu fait:
    et tu prends le complément à 1 i.e. ~k, tu obtient la valeur -102. Ensuite, ~k + 1 fait bien -101. Je ne vois pas où est le problème.

    En ce qui concerne la détermination du complément à 2 de tes représentations binaires sous formes de chaînes de caractères, voici un exemple: http://www.developpez.net/forums/sho...9&postcount=21

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  15. #15
    Membre expérimenté
    Inscrit en
    Décembre 2003
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 272
    Par défaut
    Citation Envoyé par sandball22
    [...]j'ai la séquence binaire suivante 101 au départ [...]
    Non, c'est du décimal. D'ailleurs quand tu vois -102, tu dois bien te douter que ce n'est pas du binaire...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Technique du complément A1
    Par Évariste Galois dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 29/09/2005, 17h19
  2. [Conception] Complément à 1 (IP et Masque de sous réseaux)
    Par zeldoi5 dans le forum Général Java
    Réponses: 18
    Dernier message: 19/04/2005, 17h07
  3. Progression dans TShFileOpStruct (Complément de FAQ)
    Par yoghisan dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 14/03/2005, 21h16
  4. [TrayIcon] Complément d'info...
    Par SteelBox dans le forum C++Builder
    Réponses: 2
    Dernier message: 02/04/2004, 17h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo