function fibonacchi(x:integer):integer;
// функция возвращает порядковый номер введённого числа
// ряда Фибоначчи. Если число не является элементом
// из данного ряда, то функция возвращает -1
var counter:integer = 2;
s1,s2,s3:integer;
begin
s1 := 0;
s2 := 1;
s3 := 0;
if x = 0 then fibonacchi:=1
else if x = 1 then fibonacchi:=2
else begin
while s3 < x do begin
s3 := s1 + s2;
s1 := s2;
s2 := s3;
inc(counter);
end;
if s3 = x then fibonacchi:=counter
else fibonacchi:=-1;
end;
end;
begin
write(fibonacchi(13));
end.
У - узел
М - маска
С - сеть
Нам известен узел - это 200.15.100.23
Нам известен адрес сети - это 200.15.96.0
Маска неизвестна. Если в маске стоит 255 - то число остается тоже самое:
У - 200.15.100.23
М- 255.255.Х.0
С - 200.15.96.0
Нам нужно найти НАИМЕНЬШЕЕ возможное значение третьего слева байта маски, его обозначила за Х выше.
Переведем 100 и 96 в двоичную систему счисления и получим:
100 - 1100100
96 - 1100000
Т.к в маске 8 разрядов, то перед каждым полученным числом в двоичной системе счисления поставим 0.
Получим:
01100100 - у
xxxxxxxx - м
01100000 - с
Сделаем побитовое перемножение с конца. Запомним, что в маске идут сначала все нули, а затем единицы.
01100100 - узел. Его умножаем на маску
11100000 - маска.
01100000 - сеть. Получаем ее после перемножения узла на маску.
Перемножили, получили маску - 11100000.
Возвращаемся к вопросу задачи: Чему равно наименьшее возможное значение третьего слева байта маски?
Тут все просто, осталось перевести маску из двоичной СС в десятичную СС.
Расставим степени двойки над маской
76543210
11100000
Если остались вопросы - задавай в комментариях, отвечу.