给定一个子网掩码,计算可用主机的数量。

huangapple go评论85阅读模式
英文:

Given a netmask, calculates the number of available hosts?

问题

在Go语言中,我找到了这样一个算法,但我不理解它,有人可以为我解释一下吗?谢谢!

func networkSize(mask net.IPMask) int32 {
    m := net.IPv4Mask(0, 0, 0, 0)
    for i := 0; i < net.IPv4len; i++ {
        m[i] = ^mask[i]
    }

    return int32(binary.BigEndian.Uint32(m)) + 1
}

这段代码的作用是计算网络的大小。它接受一个IP掩码作为参数,然后通过对掩码进行位运算来计算网络的大小。

首先,创建一个长度为4的字节切片m,并将其初始化为全0的IPv4掩码。

然后,通过循环遍历掩码的每个字节,将其取反并赋值给m对应的字节。

最后,将m转换为一个32位的无符号整数,并加1后返回。

希望这个解释对你有帮助!

英文:

in Go,I find such a algorithm,but I don't understand it,can anyone explain it for me,thanks!

func networkSize(mask net.IPMask) int32 {
    m := net.IPv4Mask(0, 0, 0, 0)
    for i := 0; i &lt; net.IPv4len; i++ {
	    m[i] = ^mask[i]
    }

    return int32(binary.BigEndian.Uint32(m)) + 1
}

答案1

得分: 1

将子网掩码的每个位取反,将结果视为大端32位整数的4个字节,并将结果加1。因此,255.255.252.0 => 00000000.00000000.00000011.11111111 => 1023,将其加1得到1024。

英文:

Invert each bit in the netmask, treat the result as the 4 bytes of a bigendian 32-bit integer, and add 1 to the result. So 255.255.252.0 => 00000000.00000000.00000011.11111111 => 1023, adding 1 to this is 1024.

答案2

得分: 0

IP地址与子网掩码进行逻辑与运算。子网掩码可以用来划分多个网络ID。点击这里查看一个示例:http://www.garykessler.net/library/subnet_masks.html。

英文:

The ip address is logical and'ed with the subnet_mask. The subnet_mask can be used to carve out many net_id. Read here for an example: http://www.garykessler.net/library/subnet_masks.html.

huangapple
  • 本文由 发表于 2013年10月22日 18:22:57
  • 转载请务必保留本文链接:https://go.coder-hub.com/19515156.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定