Задание №13 — Маски подсети
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IP-адресом 137.78.0.0 и маской сети 255.255.224.0.
Сколько в этой сети IP-адресов, для которых сумма единиц в двоичной записи IP-адреса чётна?
В ответе укажите только число.
Правильный ответ
4096
Пояснение
Решение:
Маска 255.255.224.0 содержит единиц, поэтому свободны 13 младших битов и всего в сети адреса. Двоичная запись адреса сети — 10001001 01001110 00000000 00000000, в её фиксированных 19 битах 1000100101001110000 ровно 7 единиц, то есть нечётное количество.
Сумма единиц всего адреса чётна тогда и только тогда, когда в свободной части число единиц нечётно. Среди всех 13-битных наборов ровно половина имеет нечётное число единиц, поэтому подходят адресов.
net = 137 * 256**3 + 78 * 256**2
host = 32 - 19
print(sum(1 for k in range(2 ** host)
if bin(net + k)[2:].zfill(32).count('1') % 2 == 0)) # 4096
Ответ: 4096