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

Java Discussion :

[Conception] Complément à 1 (IP et Masque de sous réseaux)


Sujet :

Java

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 47
    Points : 20
    Points
    20
    Par défaut [Conception] Complément à 1 (IP et Masque de sous réseaux)
    Bonjour tout le monde!
    Après avoir trouvé nombre d'infos assez pratiques, je suis bloqué aujourd'hui
    Je n'arriva pas à faire correctement un complément à un.....

    Avant de mettre mon code, je vais expliquer le pourquoi du comment je cherche ça :
    Dans un fichier que je parse, j'obtiens l'adresse IP d'un LAN et son masque de sous réseau, avec ces informations je dois définir la plage d'adresse IP du LAN (donc la dernière adresse du LAN) : pour cela je dois faire l'opération suivante :
    AdIPFin = (AdIPLAN) OU [ (Masq complémenté à 1) - 1]

    Malheureusement l'opération pour faire le masque "déconne", en effet il m'affiche une réponse négative. En plus je ne sais pas comment "convertir" des décimaux en binaires, donc je fais des complément à 1 sur des décimaux (c'est pour ça que ça ne doit pas marcher enfin je en sais pas...)

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int octetcpl1 = ~anshort;	//Ici
    int octetcpl2 = ~bnshort;	// on fait le
    int octetcpl3 = ~cnshort;	// complément
    int octetcpl4 = ~dnshort - 1;	// à 1 du masque de sous réseau
    Pour tester l'opération du complément à 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    System.out.println("Complement a 1 de 0 : "+(~00));
    System.out.println("Complement a 1 de 1 : "+(~01));
    System.out.println("Complement a 1 de 2 : "+(~02));
    J'ai ce résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Complement a 1 de 0 : -1
    Complement a 1 de 1 : -2
    Complement a 1 de 2 : -3
    Pouriez vous m'aider???



    [Modéré par Didier] : ajout de tag dans le titre - Les règles du forum Java

  2. #2
    Membre régulier Avatar de jiraiya
    Inscrit en
    Mai 2002
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 100
    Points : 116
    Points
    116
    Par défaut
    essaye avec des unsigned int ça ira surement mieux

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 47
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par jiraiya
    essaye avec des unsigned int ça ira surement mieux
    Comme ça : ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    unsigned int octetcpl1 = ~anshort;	//Ici
    unsigned int octetcpl2 = ~bnshort;	// on fait le
    unsigned int octetcpl3 = ~cnshort;	// complément
    unsigned int octetcpl4 = ~dnshort - 1;	// à 1 du masque de sous réseau

  4. #4
    Membre régulier Avatar de jiraiya
    Inscrit en
    Mai 2002
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 100
    Points : 116
    Points
    116
    Par défaut
    oui, au moins à l'affichage tu n'auras plus de de nombres négatifs

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 47
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par jiraiya
    oui, au moins à l'affichage tu n'auras plus de de nombres négatifs
    Désolé je suis assez mauvais en Java...
    Il m'envoie bouler....
    Et me fais des erreurs depuis que j'ai ajouté le "unsigned"....
    (erreurs sur chaque ligne ou je l'ai rajouté...)

  6. #6
    Membre régulier Avatar de jiraiya
    Inscrit en
    Mai 2002
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 100
    Points : 116
    Points
    116
    Par défaut
    euh c'est des short que tu a à droite?? si oui essaye avec des unsigned short plutot

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 47
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par jiraiya
    euh c'est des short que tu a à droite?? si oui essaye avec des unsigned short plutot
    Non, ce sont de simples int :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    					unsigned int ashort = Integer.parseInt(st1.nextToken("."));
    					unsigned int bshort = Integer.parseInt(st1.nextToken("."));
    					unsigned int cshort = Integer.parseInt(st1.nextToken("."));
    					unsigned int dshort = Integer.parseInt(st1.nextToken("."));
    (c'est vrai que le nom prète à confusion.....)
    J'ai essayé de mettre aussi en "unsigned" mais il me fait les mêmes erreurs (petite précision : j'utilise le SDK 1.4.0 ça peut peut être jouer je ne sais pas...)

  8. #8
    Membre régulier Avatar de jiraiya
    Inscrit en
    Mai 2002
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 100
    Points : 116
    Points
    116
    Par défaut
    quelles sont les erreurs que tu obtiens?? ça aidera surement

  9. #9
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 47
    Points : 20
    Points
    20
    Par défaut
    U:\Benoît\ServeurJava\PlanAddressage\LireImmeuble.java:162: not a statement
    unsigned int ashort = Integer.parseInt(st1.nextToken("."));
    ^
    U:\Benoît\ServeurJava\PlanAddressage\LireImmeuble.java:162: ';' expected
    unsigned int ashort = Integer.parseInt(st1.nextToken("."));
    ^
    U:\Benoît\ServeurJava\PlanAddressage\LireImmeuble.java:163: not a statement
    unsigned int bshort = Integer.parseInt(st1.nextToken("."));
    ^
    U:\Benoît\ServeurJava\PlanAddressage\LireImmeuble.java:163: ';' expected
    unsigned int bshort = Integer.parseInt(st1.nextToken("."));
    ^
    U:\Benoît\ServeurJava\PlanAddressage\LireImmeuble.java:164: not a statement
    unsigned int cshort = Integer.parseInt(st1.nextToken("."));
    ^
    U:\Benoît\ServeurJava\PlanAddressage\LireImmeuble.java:164: ';' expected
    unsigned int cshort = Integer.parseInt(st1.nextToken("."));
    ^
    U:\Benoît\ServeurJava\PlanAddressage\LireImmeuble.java:165: not a statement

    unsigned int dshort = Integer.parseInt(st1.nextToken("."));
    ^
    U:\Benoît\ServeurJava\PlanAddressage\LireImmeuble.java:165: ';' expected
    unsigned int dshort = Integer.parseInt(st1.nextToken("."));
    ^
    U:\Benoît\ServeurJava\PlanAddressage\LireImmeuble.java:268: not a statement
    unsigned int octetcpl1 = ~anshort; //Ici
    ^
    U:\Benoît\ServeurJava\PlanAddressage\LireImmeuble.java:268: ';' expected
    unsigned int octetcpl1 = ~anshort; //Ici
    ^
    U:\Benoît\ServeurJava\PlanAddressage\LireImmeuble.java:269: not a statement
    unsigned int octetcpl2 = ~bnshort; // on fait le
    ^
    U:\Benoît\ServeurJava\PlanAddressage\LireImmeuble.java:269: ';' expected
    unsigned int octetcpl2 = ~bnshort; // on fait le
    ^
    U:\Benoît\ServeurJava\PlanAddressage\LireImmeuble.java:270: not a statement
    unsigned int octetcpl3 = ~cnshort; // complément
    ^
    U:\Benoît\ServeurJava\PlanAddressage\LireImmeuble.java:270: ';' expected
    unsigned int octetcpl3 = ~cnshort; // complément
    ^
    U:\Benoît\ServeurJava\PlanAddressage\LireImmeuble.java:271: not a statement
    unsigned int octetcpl4 = ~dnshort - 1; // à 1 du masque de sous réseau
    ^
    U:\Benoît\ServeurJava\PlanAddressage\LireImmeuble.java:271: ';' expected
    unsigned int octetcpl4 = ~dnshort - 1; // à 1 du masque de sous réseau
    ^


    J'ai pas tout mis non plus..... (car im me trouve des erreurs sur les lignes utilisant les variables unsigned int...)

  10. #10
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 99
    Points : 82
    Points
    82
    Par défaut
    Salut,

    Tout d'abord c'est normal que ca compile pas, les unsigned int n'existe pas en JAVA 1.4.

    Les seuls types primitifs non signés sont les short et char.

    Tu peux donner un exemple de ce que tu veux faire,

    Genre une Adresse IP, le masque de sous reseaux et le resultat que tu veux obtenir apres l'opération en decimale.
    "Il n'existe que deux choses infinies, l'univers et la bêtise humaine... mais pour l'univers, je n'ai pas de certitude absolue." A. Einstein

  11. #11
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 47
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par chicorico
    Salut,

    Tout d'abord c'est normal que ca compile pas, les unsigned int n'existe pas en JAVA 1.4.

    Les seuls types primitifs non signés sont les short et char.

    Tu peux donner un exemple de ce que tu veux faire,

    Genre une Adresse IP, le masque de sous reseaux et le resultat que tu veux obtenir apres l'opération en decimale.
    Ben je venais de trouver que le genre non signé n'existait pas en java... (mais vu les connaissance limitées que j'ai en Java....)

    Alors voici l'exemple :
    IP: 10.128.128.0
    Masque : 255.255.252.0

    En Hexa, ça donne :
    IP : 0000 1010 . 1000 0000 . 1000 0000 . 0000 0000
    Masque : 1111 1111 . 1111 1111 . 1111 1100 . 0000 0000
    !Masque : 0000 0000 . 0000 0000 . 0000 0011 . 1111 1111
    !Masque-1 : 0000 0000 . 0000 0000 . 0000 0011 . 1111 1110

    Ensuite l'opération :
    0000 1010 . 1000 0000 . 1000 0000 . 0000 0000
    +
    0000 0000 . 0000 0000 . 0000 0011 . 1111 1110
    =
    0000 1010 . 1000 0000 . 1000 0011 . 1111 1110
    Soit :
    10.128.131.254
    Voici!
    Bon je suis encore de la vieille école de vous mettre l'état des bits.
    mais ça m'a permis de m'appercevoir que l'erreur dans mon code était l'opération du complément à un....

  12. #12
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 47
    Points : 20
    Points
    20
    Par défaut
    Un petit Up s'il vous plaît?
    Je suis désespéré...

    Apparemment selon mes tests :
    quand je demande à fair eun complément à un du chiffre X, Java me renvoie -(X+1).

    Sur ce site :
    http://mindprod.com/jgloss/binary.html
    Ils me disent que el complement à un en java se fait par ~
    Mais si ça se trouve ce n'est pas ça....

    Je ne sais vraiment plus quoi faire....
    De l'aide please!!

  13. #13
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 99
    Points : 82
    Points
    82
    Par défaut
    Salut, il existe un type BitSet en java. Qui represente un vecteur de bits et permet de faire des ops binaire dessus.
    Jettes un oeil dans la javadoc, ca pourra peut etre t'aider.

    Il me semble que nombre = ~nombre est equivalent à nombre = nombre^255 si nombre est compris entre 0 et 255?

    Je me pencherai sur ton prob apres manger
    "Il n'existe que deux choses infinies, l'univers et la bêtise humaine... mais pour l'univers, je n'ai pas de certitude absolue." A. Einstein

  14. #14
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 99
    Points : 82
    Points
    82
    Par défaut
    Bon, apres un bon petit repas, les idées sont plus claires , essaye 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
     
     
    		String ip1 = "10";
    		String ip2 ="128";
    		String ip3 = "128";
    		String ip4 = "0";
     
    		String mask1 = "255";
    		String mask2 ="255";
    		String mask3 = "252";
    		String mask4 = "0";
     
    		mask1 = Integer.toString(Integer.parseInt(mask1)^255);
    		mask2 = Integer.toString(Integer.parseInt(mask2)^255);
    		mask3 = Integer.toString(Integer.parseInt(mask3)^255);
    		mask4 = Integer.toString((Integer.parseInt(mask4)^255)-1);
     
    		ip1 = Integer.toString(Integer.parseInt(ip1)|Integer.parseInt(mask1));
    		ip2 = Integer.toString(Integer.parseInt(ip2)|Integer.parseInt(mask2));
    		ip3 = Integer.toString(Integer.parseInt(ip3)|Integer.parseInt(mask3));
    		ip4 = Integer.toString(Integer.parseInt(ip4)|Integer.parseInt(mask4));
     
    		String ip = ip1 + "." + ip2 + "." + ip3 + "." + ip4;
    A+
    "Il n'existe que deux choses infinies, l'univers et la bêtise humaine... mais pour l'univers, je n'ai pas de certitude absolue." A. Einstein

  15. #15
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 47
    Points : 20
    Points
    20
    Par défaut
    Je vais essayer ça de ce pas!
    Merci d'avance!
    (Au fait : bonne digestion! )

  16. #16
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 47
    Points : 20
    Points
    20
    Par défaut
    Ca marche, c'est cool!
    Pour info, pourquoi as tu choisi de faire ça :
    ??

  17. #17
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 99
    Points : 82
    Points
    82
    Par défaut


    Je comprend pas ta question ?
    "Il n'existe que deux choses infinies, l'univers et la bêtise humaine... mais pour l'univers, je n'ai pas de certitude absolue." A. Einstein

  18. #18
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 47
    Points : 20
    Points
    20
    Par défaut
    Ben le ^ c'est le signe de puissance non?

    Alors je ne vois pas trop ce que fait 255^255....
    C'est pour cela ma question.

  19. #19
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 99
    Points : 82
    Points
    82
    Par défaut
    Attention, en java ^ n'est pas le signe de la puissance, c'est l'operateur binaire XOR

    Ravi d'avoir resolu ton prob.

    A+...
    "Il n'existe que deux choses infinies, l'univers et la bêtise humaine... mais pour l'univers, je n'ai pas de certitude absolue." A. Einstein

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

Discussions similaires

  1. Adresse du réseau, broadcast et masque de sous réseaux
    Par macadelino dans le forum Protocoles
    Réponses: 4
    Dernier message: 22/01/2013, 08h42
  2. Problème masques de sous réseaux iPv4
    Par Cynthia67 dans le forum Protocoles
    Réponses: 2
    Dernier message: 12/12/2012, 16h46
  3. Réponses: 5
    Dernier message: 21/12/2004, 16h19
  4. [MFC] Récupération du masque de sous-réseau
    Par ChrSan dans le forum MFC
    Réponses: 2
    Dernier message: 02/02/2004, 16h31

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