Задание №13 — Маски подсети
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IP-адресом 171.200.52.64 и маской сети 255.255.255.248.
Сколько в этой сети IP-адресов, для которых сумма единиц в двоичной записи IP-адреса чётна?
В ответе укажите только число.
Правильный ответ
4
Пояснение
Решение:
Последний байт маски , поэтому под номер узла отведены 3 младших бита, адрес сети равен 171.200.52.64 (), а всего в сети адресов.
Посчитаем единицы в неизменной части адреса: — 5 единиц, — 3, — 3, старшие 5 битов последнего байта — 1. Итого — чётное число.
Значит сумма единиц всего адреса чётна тогда и только тогда, когда чётно число единиц в трёх свободных битах. Подходят наборы 000, 011, 101 и 110 — их .
ip = [171, 200, 52, 64]
mask = [255, 255, 255, 248]
net = [ip[i] & mask[i] for i in range(4)]
count = 0
for host in range(8):
addr = net[:3] + [net[3] | host]
if sum(bin(b).count('1') for b in addr) % 2 == 0:
count += 1
print(count)Ответ: 4