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

Langage Java Discussion :

Nombres non-signés en java ?


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 16
    Points : 12
    Points
    12
    Par défaut Nombres non-signés en java ?
    Bonjour,
    j'ai un petit problème car je désire traiter des nombres non signés sur exactement 32 bits, ou 16 bits, ou... selon la situation. Java ne possédant pas de types unsigned, je suis embêté puisque j'aimerais garder le même range que des unsigned. Donc par exemple, pour un int, je le définis en long pour ne pas être embêté par le bit des signes. Ce qui m'intéresse est d'avoir les bits exactement pareil. Le problème est qu'en faisant un cast, il me transforme en nombre négatif et change la valeur de mes bits.
    Exemple :
    short a = 0x81; // soit 1000 0001 en binaire
    je souhaite récupérer cette même valeur binaire mais dans un byte
    byte b = (byte) a; // me donne b = - 1111 1111

    j'espère que mes explications ont été claires. Serait il possible de me dire comment je pourrais gérer ce problème de unsigned?

  2. #2
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Points : 360
    Points
    360
    Par défaut
    Je developpe actuellement une application p2p compatible avec les reseaux existant et je me suis heurté à de tels problemes egalement (en ajoutant le fait que les octets sont lus en little endian alors que java fonctionne en big endian). Si les bits sont bien positionné, il te suffit de faire un & 0xff au moment d'afficher pour avoir la bonne valeur. Je te renvoie vers un article sympatique sur developpez en ce qui concerne la manipulation de bits en java http://gfx.developpez.com/tutoriel/java/binaire/

  3. #3
    Membre éclairé
    Avatar de N_I_C_S
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 450
    Points : 681
    Points
    681
    Par défaut
    Salut,
    les négations sont gerées selon la technique du "complément à deux", cad que, par exemple, -3 a la même valeur que 253 sur un byte.
    Pour reproduire le nombre positif correspondant au négatif, il faut ajouter à celui-ci la valeur max du type considéré. ex:
    byte : unsigned = negatif + 256 (8 bits)
    short: unsigned = negatif + 65536 (16 bits)
    etc...

  4. #4
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Points : 360
    Points
    360
    Par défaut
    je suis d'accord avec toi mais il est preferable (surtout dans le cadre d'algos lourds ou tout simplement de methodes frequemment appelées) de passer par des opérations directement sur les bits de tes types primitifs

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    merci pour vos réponses ... çà va bien m'aider ...

  6. #6
    Membre éclairé
    Avatar de N_I_C_S
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 450
    Points : 681
    Points
    681
    Par défaut
    J'avais pas vu ton message avant de poster .
    En plus, je connaissais pas cette technique, c'est cool

  7. #7
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Points : 360
    Points
    360
    Par défaut
    je ne connaissais pas jusqu'il y a peu. Travaillant sur un algorithme de pathfinding pour un jeu video (deplacement des unités sur une map), j'avais une méthode appelée tres tres frequemment et l'utilisation d'opérateurs un peu plus bas niveaux tels que les décalages m'ont permis de diviser d'un facteur 5 à 10 le temps d'execution (bon faut dire que c'etait le point critique de l'algo aussi) donc je n'hesite pas à proposer quand des personnes en ont besoin

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/07/2015, 08h48
  2. Réponses: 6
    Dernier message: 08/06/2012, 13h42
  3. soustraction de nombres non signés
    Par boboss123 dans le forum C
    Réponses: 4
    Dernier message: 06/05/2010, 15h25
  4. Réponses: 9
    Dernier message: 12/10/2006, 00h36
  5. Réponses: 3
    Dernier message: 05/09/2006, 00h47

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