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 :

promotion numérique signé non signé


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2010
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 22
    Par défaut promotion numérique signé non signé
    salut.
    quelle sont les règles a suivre pour la convertion d'un type signé vers un type non signé et inversement ?

    je suis face a ces 2 instructions et je veux comprendre le principe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
     
    int d ,w,i=-5;
    w =......
     
    d= (unsigned char)w;
     
    printf(i =%u",i)
    merci pour vos interventions

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 478
    Par défaut
    Bonjour,

    Citation Envoyé par Débutant_ASM Voir le message
    quelle sont les règles a suivre pour la convertion d'un type signé vers un type non signé et inversement ? je suis face a ces 2 instructions et je veux comprendre le principe :
    Il faut savoir qu'à largeur égale, deux entiers binaires signés et non signés sont représentés en mémoire exactement de la même façon. C'est au programme − ou directement aux instructions du microprocesseur − de préciser la manière dont ils l'interprètent. Si tu prends le cas d'un compteur kilométrique (qui ne serait pas équipé d'une roue libre pour éviter ce genre de gruge) :

    999999

    Soit tu considères que le véhicule n'a fait qu'avancer, et dans ce cas, il approche du million de kilomètres parcourus, ce qui est vénérable, soit tu considères que le véhicule est neuf et qu'il vient de parcourir son premier kilomètre en marche arrière, auquel cas :

    999999 = -1, par congruence.

    Dans le second cas, tu divises la gamme des nombres affichables en deux parties égales : de 0000 à 4999, tu considères le nombre comme positif, et de 5000 à 9999 tu considères qu'il s'agit en fait d'un nombre négatif qui a « fait le tour ». Il suffit alors de regarder si le chiffre de poids fort est compris entre 0 et 4, ou entre 5 et 9, pour savoir si le nombre est positif ou négatif.

    L'avantage, c'est qu'en binaire, il n'y a que deux valeurs possibles. C'est pourquoi un nombre binaire signé positif voit toujours son bit de poids fort à zéro, et un négatif, à un. Mais ce n'est qu'une conséquence du comptage du binaire dit « naturel », il ne s'agit pas d'un « flag » que l'on met artificiellement à zéro ou à un pour choisir le signe, comme on le fait pour les nombres flottants normalisés.

  3. #3
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Pour compléter l'explication de Obsidian qui expose le cas où les nombres signés sont en complément à 2, la norme précise, indépendamment de la représentation des nombres signés, le passage de signé à non signé :

    La valeur signée va être ramenée dans la plage du type non signé en lui additionnant ou soustrayant un nombre suffisant de fois la valeur maximum du type non signé +1.

    Par exemple si on a un unsigned char de valeur maximum 255, et que l'on veut transformer la valeur signée -12384 en unsigned char , on obtiendra 160
    -12384 = -49*256+160
    et pour 23456 on obtiendra également 160:
    23456 = 91*256+160

  4. #4
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    salut.
    pour la conversion d'un type signé en un type non signe :
    - si la valeur initiale est positive ou nulle ,elle est donc conservée par la conversion.
    - si la valeur initiale est négative ,la conversion se fait en ajoutant à la valeur initilae,la avaleur N+1 avec N correspondant à la plus grande valeur dans le type d'arrivé.

    je me permet de donner un exemple :
    sur (16 bit)
    pour un entier x = -3 sa conversion en unsigned int donne la valeur 65533 ( = 65535 + (-3) )

  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    pour la conversion d'un type signé en un type non signe :
    - si la valeur initiale est positive ou nulle ,elle est donc conservée par la conversion.
    Pas toujours. Pour cela, il faut que la valeur soit représentable dans le type non signé (cf l'exemple que j'ai donné plus haut)
    - si la valeur initiale est négative ,la conversion se fait en ajoutant à la valeur initilae,la avaleur N+1 avec N correspondant à la plus grande valeur dans le type d'arrivé.
    Et itérer le processus si nécessaire.

    je me permet de donner un exemple :
    sur (16 bit)
    pour un entier x = -3 sa conversion en unsigned int donne la valeur 65533 ( = 65535 + (-3) )
    65536 + (-3)

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Je me souviens avoir fait des tests, et il me semble qu'un type non-signé de taille inférieure à int peut être promu sans problème en int signé, mais que pour les tailles au-dessus il y a un souci (mais je ne sais plus lequel).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. byte signé/non-signé pour image.
    Par Furior dans le forum Langage
    Réponses: 2
    Dernier message: 10/05/2012, 10h02
  2. Manipulation signé non-signé
    Par MSP91120 dans le forum VB.NET
    Réponses: 6
    Dernier message: 20/08/2010, 17h30
  3. Problème de valeur signé, non signé sous PL7 PRO
    Par absy456 dans le forum Automation
    Réponses: 2
    Dernier message: 09/06/2009, 17h27
  4. Conversion entier signé/non signé
    Par BATCHOS CON TEQUILA dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 03/03/2009, 16h53
  5. Combinaisons de type signés et non signés
    Par Hell dans le forum Langage
    Réponses: 4
    Dernier message: 01/11/2004, 19h01

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