2017-03-26 60 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