我正在尝试用Java和Python编写广播ip地址以供练习。下面是我用java编写的代码,它可以给我正确的输出:
public IPv4Address getBroadcastAddress() throws IllegalArgumentException {
long bits = 0;
bits = this.address.decimalIP() ^ (~(0xffffffff ^ (1L << 32 - getMaskLength()) - 1));
IPv4Address broadcast = new IPv4Address(bits);
return broadcast;
}
这里decimalIP
是表示IP地址的数字,getMaskLength
-number表示其掩码。我收到了预期的广播地址。
我在python中使用同样的逻辑得到了意外的结果:
在这里,所有组件表示与java中相同的条目。调试之后,我得到了一个数字(~(0xffffffff ^ (1 << 32 - self.mask) - 1))
是负数。在文档中,运算符~
以位表示倒数,但我不明白为什么这个数字在Python中是负数,而在Java中却不是?在
Python整数不是有界的,也不是有符号的,因此
~
会创建一个负数:然而,Java中的
^{pr2}$~
会给你一个two的补码,而子网掩码上的操作需要一个一个补码,这可以通过在网络掩码上使用XOR
来实现。因为这会撤销已经应用的其他XOR
操作,所以根本不需要在这里使用1的补码:我想你可以在这里使用^{} :
相关问题 更多 >
编程相关推荐