【发布时间】:2023-03-04 15:21:01
【问题描述】:
我在使用 IP 地址和子网掩码计算广播地址时遇到问题。看起来很简单,应该只是 broadcast=ip|~mask ,但在我的情况下似乎不起作用。我尝试使用 + 代替 OR 运算符并使用 unsigned int 代替有符号,但它仍然不起作用。这是执行此操作的代码部分,希望您能帮助我。作为 IP 地址的数组 net[] 和 mask[] 是整数,以前在程序中使用过,并且可以正确输出并且在我的程序内部的其他操作中工作正常(将它们转换为二进制,通过在它们之间使用 & 计算网络地址等.)
int broadcast[4];
for(int i=0;i<4;i++)
broadcast[i]=net[i]|(~mask[i]);
对于 192.168.50.50 和 255.255.0.0 作为 net[] 和 mask[],我希望广播为 192.168.255.255,但我得到 -64.-88.-1。 -1
【问题讨论】:
-
mask和net的值是多少?我怀疑您的~mask[i]翻转的 IP 地址中每个八位字节的八位多于八位,因此您最终得到负数,因为您翻转了int中的最高位... -
请注意
(unsigned char)(-1) == 255、(unsigned char)(-88) == 168等 -
@hlt:不管值是什么,操作数提升保证
~的结果超过8位。 -
你是绝对正确的,当然@BenVoigt
标签: c++ c mask broadcast subnet