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 :

décalage de bit et insertion par la gauche


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 165
    Points : 62
    Points
    62
    Par défaut décalage de bit et insertion par la gauche
    Bonjour,

    En fait en faisant ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char c;
    c = 0;
    c += 1;
    c = c << 1;
    on obtienne : 0000 0001, 0000 0011, 0000 0111, ...
    est ce qu'il est possible d'effectuer ceci mais dans l'autre sens: 1000 0000, 1100 0000, ... ?

  2. #2
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 16
    Points : 21
    Points
    21
    Par défaut
    oui

    avec l'operateur >>

  3. #3
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    Citation Envoyé par m0ul3sh0t Voir le message
    Bonjour,

    En fait en faisant ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char c;
    c = 0;
    c += 1;
    c = c << 1;
    on obtienne : 0000 0001, 0000 0011, 0000 0111, ...
    est ce qu'il est possible d'effectuer ceci mais dans l'autre sens: 1000 0000, 1100 0000, ... ?
    non, on obtient
    0000 0001
    0000 0010
    0000 0100
    0000 1000
    ...

  4. #4
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    en fait, pour avoir ce que tu dit, il faut une boucle et le résultat dépend de ce que tu mets dans ta boucle, mais comme elle n'est pas donnée, on ne peux faire que des suppositions

  5. #5
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    L'opérateur bitwise OR me semble plus indiqué dans les deux cas.

    Pour partir du bit de poids fort, il suffira de faire un OR 0x80 (1000000 en binaire) et de décaler à chaque fois d'un pas vers la droite.

  6. #6
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    le code suivant
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    #include <stdio.h>
    #include <stdlib.h>
     
    void affich(unsigned char x);
     
    int main(void) {
        int i;
        unsigned char c;
     
        c = 0;
        affich(c);
        for (i=0;i<7;i++) {
            c = c << 1;
            c += 1;
            affich(c);
        }
        printf("\n");
        c = 128;
        affich(c);
        for (i=0;i<7;i++) {
            c = c >> 1;
            c += 128;
            affich(c);
        }
     
        return 0;
    }
     
    void affich(unsigned char x) {
        int i, pui=128, xx;
     
        xx=(int) x;
     
        for (i=0;i<8;i++) {
            printf("%d",xx/pui);
            xx = xx - (xx/pui) * pui;
            pui = pui / 2;
        }
        printf("\n");
    }
    te donnera
    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
    00000000
    00000001
    00000011
    00000111
    00001111
    00011111
    00111111
    01111111
     
    10000000
    11000000
    11100000
    11110000
    11111000
    11111100
    11111110
    11111111

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 165
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par corentin59 Voir le message
    non, on obtient
    0000 0001
    0000 0010
    0000 0100
    0000 1000
    ...
    excuses moi, je voyais ca dans une boucle

    merci beaucoup pour cette explication

  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 : 47
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par Neitsa Voir le message
    L'opérateur bitwise OR me semble plus indiqué dans les deux cas.

    Pour partir du bit de poids fort, il suffira de faire un OR 0x80 (1000000 en binaire) et de décaler à chaque fois d'un pas vers la droite.
    en supposant qu'un char ou plutôt, un unsigned char, est représenté sur 8 bits.

    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++

    +

Discussions similaires

  1. Décalage de bits
    Par Kraz dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 21/10/2006, 18h09
  2. insertions par lots
    Par boubilescu dans le forum Access
    Réponses: 1
    Dernier message: 04/11/2005, 10h32
  3. Multiplication par décalage de bits
    Par tekman54000 dans le forum Assembleur
    Réponses: 2
    Dernier message: 25/10/2005, 11h35
  4. Décalage de bit sur unsigned char [8]
    Par dboulange dans le forum C++
    Réponses: 14
    Dernier message: 26/07/2005, 14h10
  5. Probléme d'insertion par défault
    Par xavier62 dans le forum SQL
    Réponses: 7
    Dernier message: 28/11/2003, 13h03

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