В терминологии сетей TCP/IP маска сети — это двоичное число,
Для узла с IP-адресом 224.128.112.142 адрес сети равен 224.128.64.0. Чему равен третий слева байт маски? Ответ запишите в виде десятичного числа.
Рассмотрим третий слева байт в IP-адресе узла и адресе сети, представим их в двоичном виде:
11210 = 0111 00002; 6410 = 0100 00002.
Маской сети является такое двоичное число, которое при поразрядной конъюнкции с IP-адресом узла даст адрес сети, при этом первая часть числа состоит из единиц, а всё остальное — нули. Таким числом является 1100 00002 = 19210.
Ответ: 192.
Приведём решение Владимира Артамонова на языке Python.
from ipaddress import ip_network, IPv4Address
def normalize(n): # Функция для получения из двоичного числа маску
return str(IPv4Address(int(n.ljust(32, "0"), 2)))
for mask in range(32): # Перебираем маски, если подходит, то выводим третий слева байт
net = ip_network(f"224.128.112.142/{mask}", strict=False)
if str(net.network_address) == "224.128.64.0":
mask = normalize("1" * mask)
print(mask.split(".")[2])
Приведём решение Юрия Красильникова на языке Python.
mask = [int('1'*i+'0'*(8-i),2) for i in range(9)]
print(*[m for m in mask if 112&m==64])
Приведём решение Сергея Донец на языке PascalABC.NET.
uses School;
begin
var ip := '224.128.112.142';
var net := '224.128.64.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.

