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 :

Passer un binaire negatif en decimal


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 44
    Par défaut Passer un binaire negatif en decimal
    Bonjour,
    comment passer un binaire negatif en decimal:

    Integer i = Integer.valueOf("11111111111111111111111111100111", 2);

    me donne
    Exception in thread "main" java.lang.NumberFormatException: For input string: "11111111111111111111111111100111"

    Comment faire ??????????
    Merci de votre aide
    (et merci pour les reponses aux questions precedentes!)

  2. #2
    Membre expérimenté
    Avatar de vahid
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 228
    Par défaut
    Slt
    java.lang.NumberFormatException
    Cela signifie que ton nombre est trop grand pour rentrer dans un Integer
    Essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Long l = Long.valueOf("11111111111111111111111111100111", 2);

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 44
    Par défaut long is no good!!!
    Avec un Long
    Long l = Long.valueOf ("11111111111111111111111111100111", 2);
    j'ai
    l...: 4294967271

    Alors que au depart
    Integer f = -25;
    System.out.println( "-25..:"+f.toBinaryString(f));-25..:
    me donne
    -25..:11111111111111111111111111100111

    Comment retrouver -25 a partir de sa valeur binaire????

    Merci!

  4. #4
    Membre expérimenté
    Avatar de vahid
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 228
    Par défaut
    En fait en regardant la javadoc on se rend compte que si l'on veut parser un nombre signé, il faut mettre un "-" devant

    Si tu parse des nombres signés de 32 bits, alors tu peux faire

    Si c'est un nombre positif, faire Integer.parseInt() classique
    Sinon, tu peux utiliser cette astuce : supprimer le bit de signe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		Integer i = Integer.valueOf("1111111111111111111111111100111", 2);
    		System.out.println(-(Integer.MIN_VALUE-i));
    Il y a surement mieux mais j'ai pas d'autres solution à proposer a chaud

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 44
    Par défaut je ne sais pas si le nombre est positif ou negatif!
    Le pb c'est que je ne sais pas si le nombre est positif ou negatif!
    Je n'ai qu'un assemblage de Bits que je doit decommute pour avoir la valeur decimale.
    Si qqu'un a une idee..ca m'arrangerait ce chez arrangerait
    Merci

  6. #6
    Membre expérimenté
    Avatar de vahid
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 228
    Par défaut
    Si tu as 32 bits, ton nombre est positif si le bit de gauche est à 0
    Si tu as 32 bits, ton nombre est negatif si le bit de gauche est à 1
    Si tu as - de 32 bits, alors je pense qu'on peut en deduire que ton nombre est positif (si c'est un int, pas un short )

  7. #7
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par Panneau Voir le message
    Alors que au depart
    Integer f = -25;
    System.out.println( "-25..:"+f.toBinaryString(f));-25..:
    me donne
    -25..:11111111111111111111111111100111
    Mais pas si tu utilises Integer.toString(-25,0x10)...

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 44
    Par défaut concatenation variee
    "07FF" du bit 9 au bit 115 me donne 1111111
    FFE7 du bit 0 au bit 15 me donne 1111111111100111
    Je concatene et j'obtiens
    111111111111111111111100111
    ce qui me donne
    -2080374809

    Alors que je voudrais avoir
    11111111111111111111111111100111 qui me donnerait -25 et qui corespond a la valeur exacte

    Pour ce cas je pourrais rajouter des 1 et avoir ma valeur..mais cette methode ne serait pas generique et ne marcherait pas pour d'autre concatenation..

    Merci pour votre patience

  9. #9
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    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
    public class TestBinary {
     
    	public static void main(String[] args) {
    		String negToBinaryString = Integer.toBinaryString(-2025);
    		String posToBinaryString = Integer.toBinaryString(2025);
    		String negToString = Integer.toString(-2025, 2);
    		String posToString = Integer.toString(2025, 2);
     
    		System.out.println("toBinaryString(2025) : " + posToBinaryString);
    		System.out.println("toBinaryString(-2025): " + negToBinaryString);
     
    		System.out.println("toString(2025,2)     : " + posToString);
    		System.out.println("toString(-2025,2)    : " + negToString);
     
    		int toStringDecoded = Integer.parseInt(negToString,2);
     
    		int result = 0;
    		for (char c : negToBinaryString.toCharArray()) {
    			int bit = c - '0';
    			result = (result << 1) + bit;
    		}
    		int toBinaryStringDecoded = result;
     
    		System.out.println("toString(-2025,2) decoded    : " + toStringDecoded);
    		System.out.println("toBinaryString(-2025) decoded: " + toBinaryStringDecoded);
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    toBinaryString(2025) : 11111101001
    toBinaryString(-2025): 11111111111111111111100000010111
    toString(2025,2)     : 11111101001
    toString(-2025,2)    : -11111101001
    toString(-2025,2) decoded    : -2025
    toBinaryString(-2025) decoded: -2025

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/05/2011, 12h59
  2. Type de donnée chiffre negatif avec decimal
    Par Midsou dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 06/05/2010, 10h30
  3. [Binaire] Conversion decimal -> binaire sans vecteur
    Par yann1979 dans le forum Langage
    Réponses: 1
    Dernier message: 26/10/2005, 17h10
  4. [Normalisation] Passer de ternaire a binaire et quel interet ?
    Par chateau_dur dans le forum Schéma
    Réponses: 2
    Dernier message: 17/10/2005, 23h57
  5. [ABAP] Convertir nombre decimal en binaire
    Par danael dans le forum SAP
    Réponses: 3
    Dernier message: 04/04/2005, 13h17

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