2017-03-26 59 views
-1

這可能是顯而易見的,但我錯過了它。爲什麼我需要用0xff執行AND來獲取IP地址?我看到它的方式是完全一樣的,用0xff執行AND應該保持相同的位,所以爲什麼不工作,如果我不做AND操作?爲什麼我們需要和打印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

「不起作用」是什麼意思?你會得到什麼結果或錯誤?預期的結果是什麼? – dunni

+0

對不起,但它顯示負數! – vanmarcke

+0

從你所描述的看來,真正的問題是'&0xff'在Java中的作用。標記的副本應回答這個問題。如果我誤解了你或者這個問題沒有回答你的問題,請用@yshavit提及我,我可以重新打開它 - 但在這種情況下,請澄清你正在尋找的其他信息。 – yshavit

回答

0

我想是因爲byte是簽署了一份原始數據類型。它的最小值爲-128,最大值爲127(包括)。

在這種情況下,數組中的每個字節都包含一個無符號的值,因此當您執行帶有0xff(整數)的按位AND運算符時,結果也是int