В терминологии сетей TCP/IP маской сети называется 32-разрядная двоичная последовательность, определяющая, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу самого узла в этой сети. При этом в маске сначала (в старших разрядах) стоят единицы, а затем с некоторого места нули.
Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и маске. Обычно маска записывается по тем же правилам, что и IP-адрес, — в виде четырёх байтов, причём каждый байт записывается в виде десятичного числа.
Пример. Пусть IP-адрес узла равен 231.32.255.131, а маска равна 255.255.240.0. Тогда адрес сети равен 231.32.240.0.
Для узла с IP-адресом 235.116.177.140 адрес сети равен 235.116.160.0. Чему равен третий слева байт маски? Ответ запишите в виде десятичного числа.
17710 = 101100012.
16010 = 101000002.
Заметим, что в третьем слева бите маски должна стоять единица, а в четвёртом слева бите — ноль. И так как в маске сначала идут одни единицы, а затем одни нули, получаем 111000002 = 22410.
Ответ: 224.
Приведём решение Сергея Донец на языке PascalABC.NET.
uses School;
begin
var ip := '235.116.177.140';
var net := '235.116.160.0';
for var mask := 31 downto 1 do begin
var calc := new CalcIP(ip, mask);
if calc.Network.value = net then
begin
var mask_str := calc.Netmask.value;
var octets := mask_str.Split('.');
var thirdOctet := octets[2].ToInteger;
Print(thirdOctet);
break;
end;
end;
end.

