+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Futur Membre du Club
    Inscrit en
    octobre 2005
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : octobre 2005
    Messages : 68
    Points : 17
    Points
    17

    Par défaut Comment avoir l'octet de poids fort et faible d'un nombre

    Bonjour

    Je cherche comment trouver l'octet de poids fort et faibe d'un nombre, celui-ci est sur 2 octets.
    J'ai beau chercher dans Google dans une éventuelle fonction, et je ne trouve pas, c'est peut être pas possible ?

  2. #2
    Nouveau Membre du Club
    Inscrit en
    octobre 2007
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : octobre 2007
    Messages : 66
    Points : 29
    Points
    29

    Par défaut

    Salut,

    Code :
    1
    2
    3
    4
    5
    6
    7
    nombre=100001000000101010
    manip_nombre=str(nombre)
    nombrebit=len(manip_nombre)
    bit_poid_faible=manip_nombre[nombrebit-1]
    bit_poid_fort=manip_nombre[0]
    print bit_poid_fort
    print bit_poid_faible
    Ce code permettrait de trouver le bit le plus a gauche et le bit le plus à droite (il me semble que c'est bien ca que tu voulais)
    j'espère t'avoir aidé,
    shepounet

  3. #3
    Modérateur
    Avatar de pacificator
    Inscrit en
    août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : août 2006
    Messages : 1 074
    Points : 1 682
    Points
    1 682

    Par défaut

    Je cherche comment trouver l'octet de poids fort et faibe d'un nombre
    Tu veux separer un nombre de 2 octets en 2 nombres de un octet?
    ou tu veux recuperer le bit de poids fort et celui de poids faible?

    Je te conseille d'utiliser le ET logique & et les operateurs de decalage >> et << .
    "Etre conscient de la difficulté permet de l'éviter.."
    Lao-Tseu.

  4. #4
    Membre éclairé
    Avatar de Pierre Maurette
    Inscrit en
    juillet 2002
    Messages
    274
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : juillet 2002
    Messages : 274
    Points : 350
    Points
    350

    Par défaut

    Citation Envoyé par azerty25 Voir le message
    Bonjour

    Je cherche comment trouver l'octet de poids fort et faibe d'un nombre, celui-ci est sur 2 octets.
    J'ai beau chercher dans Google dans une éventuelle fonction, et je ne trouve pas, c'est peut être pas possible ?
    La réponse est simple et compliquée. Simple parce qu'elle tient en trois lignes de code:
    Code :
    1
    2
    3
      assert(testvaleur in range(0, 65535))  
      print 'poids faible: ', testvaleur % 2
      print 'poids fort: ', (testvaleur > 32767) * 1
    Compliquée, parce qu'on ne connait pas la représentation des nombres en Python, enfin, le programmeur d'application n'a pas à la connaître. Officiellement le nombre de bits est infini. D'où le assert(), par exemple. Le problème étant de bien définir ce qu'on veut faire. Il se trouve que j'étais vaguement sur le sujet, voici un bout de code qui peut vous intéresser, nettoyé de la question des négatifs et des séparateurs d'affichage:
    Code :
    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
    #! /usr/bin/env python
    # -*- coding: iso-8859-1 -*-
     
    import sys
     
    HEX2BIN = {
               '0':'0000'
              ,'1':'0001'
              ,'2':'0010'
              ,'3':'0011'
              ,'4':'0100'
              ,'5':'0101'
              ,'6':'0110'
              ,'7':'0111'
              ,'8':'1000'
              ,'9':'1001'
              ,'A':'1010'
              ,'B':'1011'
              ,'C':'1100'
              ,'D':'1101'
              ,'E':'1110'
              ,'F':'1111'
              }
     
    def mydec2hex(value, hexdigits):
      return ('0'* (hexdigits - len(hex(value)[2:hexdigits + 2])) + hex(value)[2:hexdigits + 2]).upper()
     
    def mydec2bin(value, bits):
      return ''.join(HEX2BIN[c] for c in mydec2hex(value, bits/4))
     
    def main():
      testvaleur = 12455
      print mydec2bin(testvaleur, 16)
      assert(testvaleur in range(0, 65535))  
      print 'poids faible: ', testvaleur % 2
      print 'poids fort: ', (testvaleur > 32767) * 1
      sys.exit(0)
     
    if __name__ == '__main__':
      main()
    Bon courage

    Ooooooops !!
    J'avais lu 'bit' là où il fallait lire 'octet'. Un peu enduit d'erreur par la réponse de shepounet, celle de pacificator n'étant pas encore lisible
    Pour les octets, dans la même veine, vous pouvez essayer:
    Code :
    1
    2
    3
      assert(testvaleur in range(0, 65535))  
      print 'octet poids faible: ', testvaleur % 256
      print 'octet poids fort: ', testvaleur // 256
    Pierre

  5. #5
    Futur Membre du Club
    Inscrit en
    octobre 2005
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : octobre 2005
    Messages : 68
    Points : 17
    Points
    17

    Par défaut

    Je vous remercie pour vos réponses. C'est en effet transformer un nombre de 2 octets en 2 nombres de 1 octet.

    J'ai essayé ton code Pierre mais j'ai pas compris pourquoi il fonctionne Tu pourrais expliquer ?

    Sinon, j'ai fais ça :

    Code :
    1
    2
    3
    4
    5
    6
    7
    >>> Nb=23028
    >>> low=Nb>>8
    >>> low
    89
    >>> hi=~(low << 8) & Nb
    >>> hi
    244
    Pour Shepounet : attention, ne fais pas trop de Python sinon tu va commencer à voir des pythons dans tes toilettes toi aussi

  6. #6
    Nouveau Membre du Club
    Inscrit en
    octobre 2007
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : octobre 2007
    Messages : 66
    Points : 29
    Points
    29

    Par défaut

    Mouarf un python dans mes toilettes ?

    ===============================================
    anecdote : une américaine s'est retrouvé face à un python de 2m 20 de long en ouvrant la cuvette de ses toilettes ! Il a fallu enlevé 38 m de canalisation pour capturer la bêbête
    ===============================================

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •