Задание №13 — Маски подсети
В терминологии сетей ТСР/IР маской сети называют двоичное число, которое показывает, какая часть IР-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IР-адресом 255.211.33.160 и маской сети 255.255.А.0, где А — некоторое допустимое для записи маски число.
Определите минимальное значение А, для которого для всех IР-адресов этой сети в двоичной записи IР-адреса суммарное количество единиц в левых двух байтах не менее суммарного количества единиц в правых двух байтах.
В ответе укажите только число.
Правильный ответ
240
Пояснение
Решение:
Левые два байта у всех адресов сети одинаковы: даёт 8 единиц, даёт 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(255) + ones(211) >= ones(33 & A) + free + 8:
print(A) # 240
break
Ответ: 240