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 :

Du binaire en C++


Sujet :

C++

  1. #1
    Invité
    Invité(e)
    Par défaut Du binaire en C++
    Bonsoir,

    Je fais mes premiers pas avec les opérateurs binaires que voici :

    | : ou inclusif : retourne 1 si un des deux bits comparés ou les deux valent 1.
    ^ : ou exclusif : retourne 1 si et seulement si les deux bits sont différents.
    & : et : retourne 1 si les deux bits valent tous les deux 1.

    J'ai donc ceci :

    • 1 | 1 = 1
    • 1 | 0 = 1
    • 0 | 1 = 1
    • 0 | 0 = 0


    • 1 ^ 1 = 0
    • 1 ^ 0 = 1
    • 0 ^ 1 = 1
    • 0 ^ 0 = 0


    • 1 & 1 = 1
    • 1 & 0 = 0
    • 0 & 1 = 0
    • 0 & 0 = 0


    Ensuite il y a l'opérateur qui décale les bits vers la droite <<
    En revanche je ne comprend pas le sens de l'opérateur inverse : >> Si vous pouvez m'en dire plus...

    Et aussi quels sont les différence entre une variable ou constante signé et non signé ?

    Merci d'avance pour votre aide. Bonne soirée

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 899
    Points : 219 726
    Points
    219 726
    Billets dans le blog
    125
    Par défaut
    Bonjour,

    Le décalage des bits:
    i -> 0000 1111b
    i -> 0001 1110b
    i -> 1000 0111b

    (Enfin, que si y a rotation des bits .... ce que je n'ai jamais été sur )

    Et puis finalement
    Les signés, ( le int ) est codé sur 32 bits ... mais le tout premier bit ( celui à gauche ) indique le signe. Donc si il est à 1, c'est un nombre négatif

    Pour un nombre ( le unsigned int ) est codé aussi sur 32bits. Mais tout les bits sont utilisés pour le nombre en lui même

    Un bug qui arrive souvent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    unsigned int i = 8;
    while ( i >= 0 )
    {
     
    }
    Ça ça fait une boucle infini, car i ne peut jamais être négatif.

    Pour cela que le compilateur indique des warnings pour les comparaisons signés / non signés.

    En espérant avoir été clair

  3. #3
    Invité
    Invité(e)
    Par défaut
    Pour le signed/unsigned, c'est compris, en revanche :

    Citation Envoyé par LittleWhite Voir le message
    Le décalage des bits:
    i -> 0000 1111b
    i -> 0001 1110b
    i -> 1000 0111b

    (Enfin, que si y a rotation des bits .... ce que je n'ai jamais été sur )
    tu es sur concernant la rotation ? Ça me parait louche...

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 899
    Points : 219 726
    Points
    219 726
    Billets dans le blog
    125
    Par défaut Ajout exemple de test
    La rotation, c'est parce qu'il y a une instruction assembleur tout faites pour ça. Donc je me suis dit qu'il pourrait l'utiliser.
    Sinon, comme je n'en suis pas sur ... je vais faire un test, et je post la réponse.

    [EDIT]
    Test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include <stdio.h>
     
    int main(void)
    {
    	unsigned char var = 0x0F;
    	var = var >>1;
    	printf("0x%X\n",var);
     
    	var = var <<2;
    	printf("0x%X\n",var);
     
    	return 0;
    }
    Affiche:
    0x7
    0x1C
    Donc, pas de rotation

  5. #5
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Et puis finalement
    Les signés, ( le int ) est codé sur 32 bits ... mais le tout premier bit ( celui à gauche ) indique le signe. Donc si il est à 1, c'est un nombre négatif

    Pour un nombre ( le unsigned int ) est codé aussi sur 32bits. Mais tout les bits sont utilisés pour le nombre en lui même
    Attention, la taille d'un int ou d'un unsigned int n'est pas toujours de 32 bits.
    La seule contrainte est :
    • La plage minimale garantie d'un int est : -32767 à 32767.
    • La plage minimale garantie d'un unsigned int est : 0 à 65535.


    Citation Envoyé par LittleWhite Voir le message
    Donc, pas de rotation
    Non, la norme précise :

    The result of E1 >> E2 is E1 right-shifted E2 bit positions. If E1 has an unsigned type
    or if E1 has a signed type and a nonnegative value, the value of the result is the integral
    part of the quotient of E1 / 2E2. If E1 has a signed type and a negative value, the
    resulting value is implementation-defined.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Merci pour vos réponse. Sujet résolu.

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

Discussions similaires

  1. ouverture image binaire
    Par mathieutlse dans le forum Langage
    Réponses: 2
    Dernier message: 10/01/2003, 11h05
  2. Conversion binaire -> ASCII
    Par will13013 dans le forum C
    Réponses: 8
    Dernier message: 08/01/2003, 04h12
  3. Réponses: 5
    Dernier message: 11/12/2002, 12h31
  4. communication fichier binaire fichier txt
    Par micdie dans le forum C
    Réponses: 3
    Dernier message: 05/12/2002, 00h19
  5. fichier binaire ou texte
    Par soussou dans le forum C++Builder
    Réponses: 4
    Dernier message: 14/06/2002, 13h39

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