Задание №13 — Маски подсети
В терминологии сетей ТСР/IР маской сети называют двоичное число, которое показывает, какая часть IР-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IР-адресом 199.59.129.3 и маской сети 255.255.А.0, где А — некоторое допустимое для записи маски число.
Определите минимальное значение А, для которого для всех IР-адресов этой сети в двоичной записи IР-адреса суммарное количество единиц в левых двух байтах не менее суммарного количества единиц в правых двух байтах.
В ответе укажите только число.
Правильный ответ
254
Пояснение
Решение:
Левые два байта у всех адресов сети одинаковы: даёт 5 единиц, даёт 5. Значит при любом адресе сети.
Маска 255.255..0 фиксирует старшие разряды третьего байта: если в ровно единиц, то в третьем байте свободны младших битов, а четвёртый байт свободен целиком. Наибольшее число единиц в правых двух байтах равно
где — число единиц в двоичной записи ; здесь . Условие «для всех адресов » означает .
Перебираем допустимые значения байта маски, начиная с меньших:
- (): , одна единица, — не подходит;
- (): , одна единица, — подходит.
ones = lambda x: bin(x).count('1')
for A in [0, 128, 192, 224, 240, 248, 252, 254, 255]:
free = 8 - ones(A)
if ones(199) + ones(59) >= ones(129 & A) + free + 8:
print(A) # 254
break
Ответ: 254