Задания
Версия для печати и копирования в MS Word
Тип 13 № 60255
i

В тер­ми­но­ло­гии TCP/⁠IP мас­кой сети на­зы­ва­ют дво­ич­ное число, ко­то­рое по­ка­зы­ва­ет, какая часть IP-⁠ад­ре­са узла сети от­но­сит­ся к ад­ре­су сети, а какая  — к ад­ре­су узла в этой сети. Адрес сети по­лу­ча­ет­ся в ре­зуль­та­те при­ме­не­ния по­раз­ряд­ной конъ­юнк­ции к за­дан­но­му ад­ре­су узла и маске сети. Сеть за­да­на IP-⁠ад­ре­сом 192.168.32.160 и мас­кой сети 255.255.255.240. Сколь­ко в этой сети IP-⁠ад­ре­сов, для ко­то­рых сумма еди­ниц в дво­ич­ной за­пи­си IP-⁠ад­ре­са чётна?

В от­ве­те ука­жи­те толь­ко число.

Спрятать решение

Ре­ше­ние.

1.  За­пи­шем числа маски сети и ад­ре­са сети в дво­ич­ной си­сте­ме счис­ле­ния:

25510  −  111111112,

24010  −  111100002,

19210  −  110000002,

16810  −  101010002,

3210  −  001000002,

16010  −  101000002.

2.  Адрес сети по­лу­ча­ет­ся в ре­зуль­та­те по­раз­ряд­ной конъ­юнк­ции чисел маски и чисел ад­ре­са узла (в дво­ич­ном коде). По­сколь­ку конъ­юнк­ция 0 с чем-либо все­гда равна 0, то на тех ме­стах, где числа маски равны 0, в ад­ре­се узла стоит 0. Ана­ло­гич­но, там, где числа маски равны 255, стоит само число, так как конъ­юнк­ция 1 с любым чис­лом равна этому числу.

3.  Адрес сети 192.168.32.160  . В дво­ич­ном пред­став­ле­нии ад­ре­са 8 еди­ниц, сумма еди­ниц чётна. Маска сети окан­чи­ва­ет­ся 4 ну­ля­ми. Сле­до­ва­тель­но, 16 ва­ри­ан­тов ад­ре­са, из ко­то­рых по­ло­ви­на чётная. В сети IP-⁠ад­ре­сов, для ко­то­рых сумма еди­ниц в дво­ич­ной за­пи­си IP-⁠ад­ре­са чётна ровно 8.

 

Ответ: 8.

 

При­ведём ре­ше­ние Вла­ди­ми­ра Ар­та­мо­но­ва на языке Python.

from ipaddress import ip_network # Стан­дарт­ная биб­лио­те­ка

 

net = ip_network("192.168.32.160/255.255.255.240", strict=False) # Со­зда­ем объ­ект сети "ip/маска"

 

bin_addresses = [f"{address:b}" for address in net] # Все ад­ре­са сети пе­ре­во­дим в дво­ич­ный вид

 

counter = 0

for address in bin_addresses:

if address.count("1") % 2 == 0: # Счи­та­ем сколь­ко ад­ре­сов под­хо­дят под усло­вие

counter += 1

 

print(counter)

 

При­ведём ре­ше­ние Да­ни­ла Шар­ло­ва на языке Python.

from ipaddress import ip_network

net = ip_network('192.168.32.160/28', 0)

count = sum(bin(int(ip)).count('1') % 2 == 0 for ip in net)

print(count)

Источник: Де­мон­стра­ци­он­ная вер­сия ЕГЭ−2024 по ин­фор­ма­ти­ке