Задание 13. Информатика. ЕГЭ. Статград. 24.10.2024-1

Просмотры: 815
Изменено: 24 ноября 2024

В терминологии сетей TCP/IP маской сети называется двоичное число, определяющее, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу самого узла в этой сети. При этом в маске сначала (в старших разрядах) стоят единицы, а затем с некоторого места – нули. Адрес сети получается в результате применения поразрядной конъюнкциик заданному IP-адресу узла и маске.

Например, если IP-адрес узла равен \(231.32.255.131\), а маска равна \(255.255.240.0\), то адрес сети равен \(231.32.240.0\).

Узел с IP-адресом \(121.96.174.205\) принадлежит сети, в которой \(10\) IP-адресов, двоичная запись которых содержит ровно \(12\) единиц.

Сколько единиц содержится в двоичной записи маски этой сети?

Решение:

Посчитаем количество единиц в старших байтах. \(121 = 01111001_2\) (всего \(5\) единиц), \(96 = 01100000_2\) (\(2\) единицы), \(174 = 10101110_2\) (\(5\) единиц). Всего \(12\) единиц, не считая единицы младшего байта. Заметим теперь, что в старших \(22\) битах находится \(11\) единиц. Если положить, что оставшиеся \(10\) младших битов выделены для адреса компьютера в сети, получим, что имеется всего \(10\) комбинаций из этих битов, в которых находится только одна единица. Т.о., в записи маски сети присутствует \(22\) единицы.

Для проверки напишем програму

Python


ip = (121 << 24) + (96 << 16) + (174 << 8) + 205
mask = int('1' * 22 + '0' * 10 , 2)
q = 0
net = ip & mask

for i in range(2**10):
    ip = net + i
    q += int(bin(ip).count('1') == 12)

print(q)

Ответ: \(22\)