В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети.
Адрес сети равен 183.192.A.0, где А — некоторое допустимое для записи адреса сети число, а маска сети 255.255.252.0.
Определите минимальное значение А, для которого для всех IP-адресов этой сети в двоичной записи IP-адреса суммарное количество единиц в правых двух байтах больше трёх.
В ответе - 60, но при программном решении получается 61
from ipaddress import *
c=0
for A in range(256):
ip=IPv4Address(f'183.192.{A}.0')
net=IPv4Network(f'{ip}/255.255.252.0',0)
if net.network_address<ip<net.broadcast_address:
k=0
h=0
for ip in net:
k+=1
right=f'{ip:b}'[16:]
if right.count('1')>3:
h+=1
if k==h:
print(A)
Но если без строки проверки if net.network_address<ip<net.broadcast_address: получаем 60
Вопрос почему так получилось и когда надо проверять и писать эту строку if net.network_address<ip<net.broadcast_address:?????