【问题标题】:Why do we need to AND to print IP address [duplicate]为什么我们需要 AND 打印 IP 地址 [重复]
【发布时间】:2017-03-27 06:59:44
【问题描述】:

这可能是显而易见的,但我错过了。为什么我需要用 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);
        }
    }
}

【问题讨论】:

  • “不起作用”是什么意思?您得到什么结果或错误,预期结果是什么?
  • 对不起,它有效,但它显示负数!
  • 根据您的描述,看起来真正的问题是 &amp; 0xff 在 Java 中的作用。标记的副本应该回答这个问题。如果我误解了您或该问题没有回答您的问题,请通过 @yshavit 提及我,我可以重新打开它 - 但在这种情况下,请说明您要查找的其他信息。
  • 哦,注意PrintStream.print(byte) 没有重载,所以当你传入一个字节时,它会转换为一个 int,然后传递给print(int)。这可能是您理解中缺失的部分内容。

标签: java localhost inetaddress


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-05-23
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 2010-12-13
    • 1970-01-01
    相关资源
    最近更新 更多