IP-подсеть определяется двумя частями: сетью и длиной префикса или маской.
Например, 192.168.0.0/16
(или 192.168.0.0/255.255.0.0
).
Считается, что такой IP-адрес, как 192.168.1.1
, соответствует этой подсети, потому что
(192.168.1.1 & 255.255.0.0) == 192.168.0.0
Меня интересует то, что можно назвать инверсией подсети
, которая описывается следующим образом:
Для данной SubnetA (скажем, NetworkA / MaskA),
обратным SubnetA является список из k подсетей, таких чтоЕсли IP-адрес A соответствует SubnetA,
A не будет соответствовать ни одной из этих k подсетей, и
Каждый IP-адрес B, который не соответствует SubnetA,
будет точно соответствовать 1 из этих k б> подсети.
Код не нужен, меня интересует правильный и оптимальный способ.
У меня есть оптимизированный ответ, указанный для справки ниже, поэтому он не отвлекает людей, пытающихся решить эту проблему. Сохранили принятие ответа Рафала, поскольку он тоже первым понял это.