Задание №13 — Маски подсети
В терминологии сетей ТСР/IР маской сети называют двоичное число, которое показывает, какая часть IР-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IР-адресом 127.254.А.10, где А — некоторое допустимое для записи IР-адреса число, и маской сети 255.255.224.0.
Определите максимальное значение А, для которого для всех IР-адресов этой сети в двоичной записи IР-адреса суммарное количество единиц в левых двух байтах не менее суммарного количества единиц в правых двух байтах.
В ответе укажите только число.
Правильный ответ
159
Пояснение
Решение:
Левые два байта одинаковы у всех адресов сети: даёт 7 единиц, — тоже 7. Значит .
Маска 255.255.224.0 фиксирует старшие 3 бита третьего байта (это ); пять младших битов третьего байта и весь четвёртый байт свободны. Наибольшее число единиц в правых двух байтах:
Условие «для всех адресов » равносильно , то есть среди старших трёх битов не более одной единицы.
Максимальное : старшие три бита (это 128), младшие пять битов все единичные (это 31). Получаем .
ones = lambda x: bin(x).count('1')
for A in range(255, -1, -1):
if all(ones(127) + ones(254) >= ones((A & 224) | y) + ones(b4)
for y in range(32) for b4 in range(256)):
print(A) # 159
break
Ответ: 159