2017-03-26 2 views
-1

이것은 분명 할 수도 있지만 실종입니다. IP 주소를 얻기 위해 0xff와 AND를 수행해야하는 이유는 무엇입니까? 내가 정확히 같은 일을 볼 수있는 방법을 수행하고 0xff와 비트를 동일하게 남겨 두어야합니다. 그러면 AND 연산을 수행하지 않으면 왜 작동하지 않습니까?IP 주소를 인쇄하려면 AND가 필요합니다.

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

"작동하지 않음"은 무엇을 의미합니까? 어떤 결과 또는 오류가 발생하며 예상되는 결과는 무엇입니까? – dunni

+0

죄송 합니다만 작동하지만 음수를 표시합니다! – vanmarcke

+0

당신이 묘사 한 바에 따르면, 진짜 질문은 자바에서'& 0xff'가하는 것처럼 보입니다. 표시된 복제본이 이에 응답해야합니다. 내가 당신을 오해했거나 그 질문이 당신의 질문에 대답하지 못했다면, @yshavit로 저를 언급하십시오. 다시 열 수 있습니다. 그러나이 경우, 당신이 찾고있는 다른 정보를 분명히하십시오. – yshavit

답변

0

왜냐하면 byte은 서명 된 원시 데이터 유형이기 때문입니다. 최소값은 -128이고 최대 값은 127 (포함)입니다.

이 경우 배열의 각 바이트에는 부호없는 값이 포함되어 있으므로 0xff (비트) AND 연산자를 실행하면 결과는 int이됩니다.