В терминологии TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IP-адресом 192.168.32.160 и маской сети 255.255.255.240. Сколько в этой сети IP-адресов, для которых сумма единиц в двоичной записи IP-адреса чётна?
В ответе укажите только число.
1. Запишем числа маски сети и адреса сети в двоичной системе счисления:
25510 − 111111112,
24010 − 111100002,
19210 − 110000002,
16810 − 101010002,
3210 − 001000002,
16010 − 101000002.
2. Адрес сети получается в результате поразрядной конъюнкции чисел маски и чисел адреса узла (в двоичном коде). Поскольку конъюнкция
3. Адрес сети 192.168.32.160 . В двоичном представлении адреса
Ответ: 8.
Приведём решение Владимира Артамонова на языке Python.
from ipaddress import ip_network # Стандартная библиотека
net = ip_network("192.168.32.160/255.255.255.240", strict=False) # Создаем объект сети "ip/маска"
bin_addresses = [f"{address:b}" for address in net] # Все адреса сети переводим в двоичный вид
counter = 0
for address in bin_addresses:
if address.count("1") % 2 == 0: # Считаем сколько адресов подходят под условие
counter += 1
print(counter)
Приведём решение Данила Шарлова на языке Python.
from ipaddress import ip_network
net = ip_network('192.168.32.160/28', 0)
count = sum(bin(int(ip)).count('1') % 2 == 0 for ip in net)
print(count)

