В терминологии сетей TCP/IP маской сети называется двоичное число, определяющее, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу самого узла в этой сети. При этом в маске сначала (в старших разрядах) стоят единицы, а затем с некоторого места — нули. Обычно маска записывается по тем же правилам, что и IP-адрес, — в виде четырёх байтов, причём каждый байт записывается в виде десятичного числа. Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и маске. Например, если IP-адрес узла равен 231.32.255.131, а маска равна 255.255.240.0, то адрес сети равен 231.32.240.0. Для узла с IP-адресом 93.138.70.47 адрес сети равен 93.138.64.0. Каково наименьшее возможное общее количество единиц во всех четырёх байтах маски? Ответ запишите в виде десятичного числа.
Поскольку первый и второй байт адресов совпадает, то первые два байта полностью состоят из единиц.
Разберем третий байт маски: для этого переведем третьи байты адресов и посмотрим, в каком бите они отличаются.
70 = 010001102.
64 = 010000002.
Видно, что на
Примечание. Третий байт маски в двоичной системе счисления будет выглядеть как 1100 0000.
Ответ:18.
Приведём решение Ильи Андрианова на языке Python.
from ipaddress import *
mini = 10**10
for mask in range(32+1):
net = ip_network(f'93.138.70.47/{mask}', 0)
if str(net) == f'93.138.64.0/{mask}':
mini = min(mini, mask)
print(mini)

