2017-03-26 21 views
-1

これは明らかなことかもしれませんが、私はそれを紛失しています。 IPアドレスを取得するために0xffとANDを実行する必要があるのはなぜですか?私がそれを見る方法はまったく同じことです。実行すると0xffと同じビットを残す必要があります。なぜ、私は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

あなたが説明したところから、実際の問題はJavaで '&0xff'が行うことです。マークされた重複はそれに答えるべきです。私があなたに誤解した場合、またはその質問があなたの質問に答えなかった場合、@yshavitで私に言い聞かせてください。私はそれを再度開くことができますが、その場合、あなたが探している他の情報を明確にしてください。 – yshavit

答えて

0

byteが署名された基本データ型であると考えられます。最小値は-128、最大値は127(それを含む)です。

この場合、配列の各バイトには符号なしの値が含まれているため、ビット単位のAND演算子を0xff(整数)で実行すると、結果はintになります。

関連する問題