Задание №13 — Маски подсети
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IP-адресом 207.123.68.0 и маской сети 255.255.254.0.
Сколько в этой сети IP-адресов, для которых сумма единиц в двоичной записи IP-адреса чётна?
В ответе укажите только число.
Правильный ответ
256
Пояснение
Решение:
Маска 255.255.254.0 содержит 23 единицы и 9 нулей, поэтому в сети адресов: первые 23 бита фиксированы адресом 207.123.68.0, последние 9 битов пробегают все наборы.
Чётность общего числа единиц равна сумме чётностей фиксированной и свободной частей, а фиксированная часть у всех адресов одна и та же (в ней 14 единиц — чётное число). Поэтому вопрос сводится к тому, у скольких девятибитных наборов чётное число единиц. Наборы разбиваются на пары, отличающиеся последним битом: в каждой паре ровно один набор чётный, значит чётных ровно половина — .
def ip(a, b, c, d):
return ((a * 256 + b) * 256 + c) * 256 + d
base = ip(207, 123, 68, 0)
count = 0
for i in range(2 ** 9):
if format(base + i, '032b').count('1') % 2 == 0:
count += 1
print(count) # 256
Ответ: 256