Задание №13 — Маски подсети
В терминологии сетей ТСР/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IP-адресом 64.129.А.10, где А — некоторое допустимое для записи IP-адреса число, и маской сети 255.255.252.0.
Определите минимальное значение А, для которого для всех IP-адресов этой сети в двоичной записи IP-адреса суммарное количество единиц в левых двух байтах не более суммарного количества единиц в правых двух байтах. В ответе укажите только число.
Правильный ответ
28
Пояснение
Решение:
Левые два байта одинаковы у всех адресов сети: даёт 1 единицу, — 2 единицы. Значит .
Маска 255.255.252.0 фиксирует старшие 6 битов третьего байта (это ); два младших бита третьего байта и весь четвёртый байт свободны. Наименьшее число единиц в правых двух байтах:
Условие «для всех адресов » равносильно : среди старших шести битов должно быть не меньше трёх единиц.
Чтобы было наименьшим, единицы ставим в самые младшие из этих шести разрядов — это разряды со значениями 4, 8 и 16, а два младших бита обнуляем. Получаем .
ones = lambda x: bin(x).count('1')
for A in range(0, 256):
if all(ones(64) + ones(129) <= ones((A & 252) | y) + ones(b4)
for y in range(4) for b4 in range(256)):
print(A) # 28
break
Ответ: 28