Рассмотрим битовые комбинации:
172.16.64.0
10101100.00010000.01000000.00000000
172.16.0.0
10101100.00010000.00000000.00000000
Обратите внимание, что установленные биты в более конкретном адресе - это установленные биты в более общем адресе плюс еще несколько. Поэтому, если мы выполним побитовое И для двух адресов, результат будет равен более общему.
Всегда ли это правильный тест? Что ж, если у нас есть два адреса, которые , а не имеют отношение удержания, AND, и биты явно дадут результат, который по крайней мере на один бит отличается от предложенного родителя, так что это тест, который мы хотим. 1008 *
Если вы знаете, какой из ваших двух адресов является предлагаемым родительским объектом, а какой - предлагаемым дочерним, то мы можем просто И биты И сравнить с предлагаемым родительским. Если они могут быть в любом порядке, И их и сравнить для обоих входов в отдельности.
Чтобы получить действительные биты, если у вас уже есть IPAddress
, используйте GetAddressBytes
, чтобы получить byte[]
, используйте BitConverter
, чтобы получить unit
, затем просто используйте &
для побитового И.