Задание:
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети.
Сеть задана IP-адресом 192.168.32.160 и маской сети 255.255.255.240.
Сколько в этой сети IP-адресов, для которых сумма единиц в двоичной записи IP-адреса чётна?
В ответе укажите только число.
Решение (аналитическое)
Переведем все части предложенных IP-адреса и маски сети в 8-битное представление
192 = 11000000
168 = 10101000
32 = 00100000
160 = 10100000
255 = 11111111
240 = 11110000
В двоичном представлении адреса сети 8 единиц. В маске сети 4 нуля. Комбинаций из 4 бит с четным количеством единиц – 24 / 2 = 8.
Ответ: 8
Решение (программное)
from ipaddress import *
net = ip_network('192.168.32.160/255.255.255.240')
print(len([1 for ip in net if bin(int(ip))[2:].count('1') % 2 == 0]))
Примечание: в литературе нет четкого подтверждения, что адрес сети и широковещательный адрес подходят под определение IP-адреса. Поэтому вопрос «считать ли адрес сети и широковещательный адрес?» на сегодня остается открытым и стоит адресовать ФИПИ.
Источник: Информатика с Джобсом | ЕГЭ