Задачи с сайта СДАМ ГИА: РЕШУ ЕГЭ
№ 7669

Для некого понимания задачи стоит сказать, что есть хороший пример, правда он немного не настоящий), но под задачи подходит.
Допустим, что у вас дома стоит wi-fi роутер и у него IP-адрес 192.168.0.1 (не взламывайте соседей.. они давно логин и пароль админа меняют)
это будет адрес сети
У вас в семье много устройств, которые могут подключаться к сети интернет, и вы их, естественно, подключаете к своему wi-fi.
Для каждого устройства назначается IP-адрес, например у вас 5 устройств:
192.168.0.10
192.168.0.11
192.168.0.12
192.168.0.13
192.168.0.14
это, так называемые узлы
надеюсь, будет проще понимать задачу
возникает вопрос, а как же назначаются эти адреса всем устройствам?
опять же, для упрощения будем говорить, что маска сети за это несет ответственность
Разберем пример из задачи:
IP-адрес узла равен 231.32.255.131
маска равна 255.255.240.0
переводим в двоичную систему счисления десятичные значения байтов (при помощи python)

напоминаю про нули!!!!! слева добиваем до 8 цифр в байте (второй, третий и четвертый байт)
IP-адрес узла равен 11100111.00100000.11111111.10000011
далее маска:

маска равна 11111111.11111111.11110000.00000000
выведу результаты отдельно друг под другом для удобства
IP-адрес узла равен 11100111.00100000.11111111.10000011
маска равна 11111111.11111111.11110000.00000000
Если в маске стоят единицы, это означает, что значения битов не меняются
значит первые два байта IP-адреса остаются неизменными
последний байт будет равен 00000000, так как последний байт маски 00000000
анализируем третий байт
в маске первые четыре бита равны 1, значит первые четыре бита IP-адреса будут неизменяемыми
остальное меняется
значит адрес будет таким: 11100111.00100000.11110000.00000000
переводим в десятичную систему:

231.32.240.0
Чтобы не заниматься ерундой, и постоянно переводить из двоичной в десятичную и обратно, запомните одну важную вещь:
поразрядная конъюнкция (&) - амперсанд (на клавиатуре, где цифра 7)
она позволит нам, в большинстве случаев, просто находить результат побитовой конъюнкции чисел в десятичной системе и получать ответ

В нашей задаче вопрос звучит так:
Для узла с IP-адресом 224.128.112.142 адрес сети равен 224.128.64.0. Чему равен третий слева байт маски? Ответ запишите в виде десятичного числа.
Для решения этой задачи нужно понимать главную особенность:
мы теперь ищем маску, а значит все правила нам помогают
условно, можно представить искомый байт маски за X (некое неизвестное)
И спросите себя - на что нужно умножить (конъюнкция - это условное умножение) какое-то число, если получается это же число?
Правильно! На 255
Так как 255 - это 11111111
А по базовым правилам алгебры логики, что не умножай на 1 - все равно будет исходное
X ∗ 1 = X
В нашем случае X & 1 = X
Помня выше написанное, смело можем сказать, что 224 & X = 224, и, естественно, X = 255
128 & X = 128, и, естественно, X = 255
Первые два байта маски нашли: 255.255.X.X
со временем вы будете эти байты очень быстро отсекать из контекста задачи, и сразу приступать к поиску основного вопроса
Рассмотрим третьи байты адресов сети и узла:
112 и 64

Напоминаю про нули слева!!!! до 8 битов!
01110000
01000000
И тут самое главное в понимании задачи!
мы вспоминаем тот факт, что маска это запись формата (111...11000...00)
то есть сначала единицы, потом нули и никак иначе!
Постарайтесь осознать и запомнить!
01110000
01000000
анализируем отдельно каждые биты записи
0 & X = 0 , тут толком не понять вообще, так как X может быть и 0 и 1
а вот второй бит!
1 & X = 1
Тут 100%, что X = 1
Далее 1 & X = 0, это важнейший момент понимания границы, где маска переходит в нули
Здесь X - 100% равен 0
Из всего выше следует, что первый бит может быть любым. Второй бит точно 1. Третий бит точно 0.
Значит маска имеет вид 11000000
а это
