C++ 计算广播地址时出现错误的数字

C++ 计算广播地址时出现错误的数字,c++,c,mask,broadcast,subnet,C++,C,Mask,Broadcast,Subnet,我无法使用IP地址和子网掩码计算广播地址。看起来很简单,应该是broadcast=ip | ~mask,但在我的情况下似乎不起作用。我试过用+代替OR运算符,用unsigned int代替signed,但仍然不起作用。这是执行此操作的代码部分,希望您能帮助我。Arrays net[]是IP地址,mask[]是整数,以前在程序中使用过,在我的程序内的其他操作中输出正确,工作正常。将它们转换为二进制,使用它们之间的&等计算网络地址 int broadcast[4]; for(int i

我无法使用IP地址和子网掩码计算广播地址。看起来很简单,应该是broadcast=ip | ~mask,但在我的情况下似乎不起作用。我试过用+代替OR运算符,用unsigned int代替signed,但仍然不起作用。这是执行此操作的代码部分,希望您能帮助我。Arrays net[]是IP地址,mask[]是整数,以前在程序中使用过,在我的程序内的其他操作中输出正确,工作正常。将它们转换为二进制,使用它们之间的&等计算网络地址

int broadcast[4];    
   for(int i=0;i<4;i++) 
     broadcast[i]=net[i]|(~mask[i]);

对于作为net[]和mask[]的192.168.50.50和255.255.0.0,我希望广播是192.168.255.255,但我得到-64.-88.-1.-1

您应该使用无符号字符作为类型。IP的每个部分都是0-255之间的非负数。

您应该使用无符号字符作为类型。IP的每个部分都是一个0-255之间的非负数。

您看到的输出是因为您正在使用有符号值并将结果打印为有符号值


将值的类型更改为无符号字符并使用%hhu打印。

您看到的输出是因为您使用有符号值并将结果打印为有符号值


将值的类型更改为无符号字符并用%hhu打印。

掩码和net的值是什么?我怀疑您的~mask[I]翻转的长度超过了IP地址中每个八位字节的8位,因此您最终得到的结果是负数,因为您翻转了int中的顶部位……请注意,unsigned char-1==255,unsigned char-88==168,etc@hlt:不管值是什么,操作数提升保证~的结果超过8位。您完全正确,当然@benvoigt掩码和net的值是多少?我怀疑您的~mask[I]翻转的长度超过了IP地址中每个八位字节的8位,因此您最终得到的结果是负数,因为您翻转了int中的顶部位……请注意,unsigned char-1==255,unsigned char-88==168,etc@hlt:不管值是什么,操作数提升可以保证~的结果超过8位。您完全正确,当然@BenVoigt