2017-03-26 3 views
-1

Cela peut être quelque chose d'évident mais je l'oublie. Pourquoi ai-je besoin d'effectuer ET avec 0xff pour obtenir l'adresse IP? La façon dont je le vois est exactement la même chose, effectuer ET avec 0xff devrait laisser les bits le même, alors pourquoi ne fonctionne-t-il pas si je ne fais pas l'opération ET?Pourquoi avons-nous besoin de ET pour imprimer l'adresse IP

package com.inet.ex1; 

import java.net.InetAddress; 
import java.net.UnknownHostException; 

public class ShowIP { 
    public static void main(String[] args) { 
     InetAddress host; 
     try { 
      host = InetAddress.getLocalHost(); 
      byte[] ip = host.getAddress(); 
      for (int i = 0; i < ip.length; i++) { 
       if (i == 0) System.out.print(ip[i] & 0xff); 
       else System.out.print("." + (ip[i] & 0xff)); 
      } 
     } catch (UnknownHostException e) { 
      System.out.println(e); 
     } 
    } 
} 
+1

Que signifie "ne fonctionne pas"? Quel résultat ou erreur obtenez-vous et quel est le résultat attendu? – dunni

+0

Désolé cela fonctionne mais il montre des nombres négatifs! – vanmarcke

+0

D'après ce que vous avez décrit, il semble que la vraie question est ce que '& 0xff' fait en Java. Le duplicata marqué devrait répondre à cela. Si je vous ai mal compris ou que cette question n'a pas répondu à votre question, veuillez me mentionner avec @yshavit et je peux le rouvrir - mais dans ce cas, veuillez clarifier les autres informations que vous recherchez. – yshavit

Répondre

0

Je suppose que byte est un type de données primitive signé. Il a une valeur minimale de -128 et une valeur maximale de 127 (inclus).

Dans ce cas, chaque octet du tableau contient une valeur non signée. Ainsi, lorsque vous exécutez l'opérateur AND au niveau du bit avec 0xff (un entier), le résultat est également int.