为什么我们需要AND来打印IP地址

时间:2017-03-26 22:24:43

标签: java localhost inetaddress

这可能是显而易见的,但我很想念它。为什么我需要用0xff执行AND来获取IP地址?我看到它的方式完全相同,使用0xff执行AND应该保持位相同,那么如果我不进行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 个答案:

答案 0 :(得分:0)

我想因为byte是签名的原始数据类型。它的最小值为-128,最大值为127(含)。

在这种情况下,数组中的每个字节都包含无符号值,因此当您使用0xff(整数)执行按位AND运算符时,结果也是int