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 36 bits dans un sytème 32 bits


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 3
    Par défaut Du 36 bits dans un sytème 32 bits
    Bonjour,

    actuellement en étude, nous avons à nous pencher sur un cas qui a du en faire réfléchir plus d'un avant nous.

    Faire en sorte de convertir un entier 36bits en décimal, mais sur un système ou int est de 16 bits et long 32bits.

    Notre souci est de pouvoir stocker une valeur au delà de 4.294.967.294 (un long donc) pour ensuite le convertir en binaire.

    un petit coup de pouce serait vraiment pas du luxe car nous bloquons.

    Cordialement.

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    l'utilisation du long long int (64 bits même sur un système 32 bits) est interdite ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 3
    Par défaut
    Bonne question car il n'a pas été précisé dans le sujet. Mais d'après l'algorithme (puis C) demandé, nous devons nous débrouiller avec des int et long. Ce qui pour l'instant pose un souci rien qu'au niveau de la saisie de l'utilisateur si le chiffre est > à 32 bits.

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Voa,

    Si la limite max est précisée, et entre dans les possibilités d'un long long, il vous suffit de développer l'équivalent (avec peut-être les princilales fonctions pour l'utiliser ?).

    Sinon, il faut faire une bibliothèque de calcul multi-précision sans limite, genre GMP (voir google ).

  5. #5
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Si c'est un exercice, le but est "simplement" de te faire faire les opérations de changement de base à la main, je pense... En l'occurrence, découper ton nombre en nibbles (4 bits), stockés séparéments, et constituant au final un nombre de 9 chiffres hexadécimaux.

    Bref, faire de l'arithmétique en multiprécision de façon "manuelle". Normalement, l'étape suivante, ce sera d'implémenter les opérations arithmétiques usuelles (addition, soustraction, multiplication et division, cette dernière étant la plus marrante bien sûr).
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  6. #6
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 3
    Par défaut
    En effet Mac Lak, tu as bien vu mon problème. Il existe donc un moyen pour stocké une valeur supérieure à 4 octets.

    Ce que je cerne pas trop c'est :

    Lorsque l'utilisateur saisie un nombre supérieure à 4 octets, comment la stocker ensuite si je suis limité par mon long.

    Si j'ai bien compris ton idée il me faut la fractionner, mais par quelle méthode ?

  7. #7
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Oh, très bêtement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //! Définition d'un entier 36 bits.
    typedef struct {
        //! Vaut "1" si l'entier a débordé (overflow), "0" sinon.
        char overflow ;
        //! Vaut "0" si l'entier est positif, "1" s'il est négatif.
        char sign ;
        //! Chaque "char" contient 4 bits utiles (poids faible), plus assez d'espace pour les retenues.
        char digits[9] ;
    } int36bits ;
    Il te faudra ensuite une fonction de normalisation, qui va prendre une structure int36bits et va propager les retenues éventuelles, et garantir la condition suivante :
    quel que soit i, 0<=i<9, 0<=digits[i]<16
    Ainsi, chaque chiffre unitaire est bien un "vrai" chiffre hexa entre 0 et 15 inclus.

    De cette façon, tu effectues les opérations "unitairement" de façon vectorielle (chiffre à chiffre), puis la normalisation va effectuer la propagation des retenues. Si tu débordes trop, tu positionnes overflow et tu sais alors que le chiffre affiché est faux. C'est un cas plus que probable : si tu prends 0xFFFFFFFFF (le plus grand entier positif sur 36 bits en NON-signé), et que tu l'augmentes de 1, tu obtiens 0x1000000000, qui ne peut pas tenir en moins de 37 bits => overflow. Avec les multiplications, c'est encore pire, bien entendu : la multiplication d'un nombre de N bits par un nombre de M bits requiert un entier (N + M) (EDIT : et non pas (N x M)...) bits pour être stocké, de façon générale.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

Discussions similaires

  1. 256 passages dans une boucle 8 bit
    Par petitours dans le forum C
    Réponses: 5
    Dernier message: 09/02/2006, 13h25
  2. Réponses: 2
    Dernier message: 17/08/2005, 14h40
  3. Insérer un entier sur 64 bits dans une base ?
    Par DJZiaK dans le forum SQLite
    Réponses: 1
    Dernier message: 10/05/2005, 17h37
  4. Ecriture d'un seul bit dans un fichier
    Par fantomasmusic dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 31/01/2005, 19h21
  5. Réponses: 3
    Dernier message: 23/06/2004, 21h17

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