В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети.
Сеть задана IP-адресом 172.16.128.0 и маской сети 255.255.192.0.
Сколько в этой сети IP-адресов, для которых количество единиц в двоичной записи IP-адреса не кратно 2?
В ответе укажите только число.
Ответ:
ЕГЭ по информатике Основная волна 07.06.2024 kompege.ru – задание №13
Решение:
|
1 2 3 4 5 6 7 |
from ipaddress import * k=0 net=ip_network('172.16.128.0/255.255.192.0') for i in net: if bin(int(i))[2:].count('1')%2!=0: k=k+1 print(k) |
Объяснение кода:
- Импортирование модуля
ipaddress:
1from ipaddress import *
Импортируем все функции из модуляipaddress, который предоставляет возможность работы с IP-адресами и сетями. - Инициализация счетчика:
1k = 0
Инициализируем счетчикkдля подсчета подходящих IP-адресов. - Определение сети:
1net = ip_network('172.16.128.0/255.255.192.0')
Создаем объект сетиnetс IP-адресом172.16.128.0и маской255.255.192.0. - Перебор всех IP-адресов в сети:
123for i in net:if bin(int(i))[2:].count('1') % 2 != 0:k = k + 1
Перебираем все IP-адреса в сетиnet:bin(int(i))[2:].count('1'): Преобразуем IP-адрес в целое число, затем в двоичную строку (без префикса ‘0b’), и считаем количество единиц.% 2 != 0: Проверяем, является ли количество единиц нечетным.- Если количество единиц нечетное, увеличиваем счетчик
kна 1.
- Вывод результата:
1print(k)
Выводим значение счетчикаk, которое показывает количество подходящих IP-адресов.
Итог:
Этот код перебирает все IP-адреса в заданной сети, проверяет, является ли количество единиц в двоичной записи каждого адреса нечетным, и подсчитывает количество таких адресов.
Ответ: 8192