Калькуляторы верны, начальный адрес в сети / 23 всегда будет иметь четный третий октет. (А для / 22 он будет делиться на 4, для / 21 он будет делиться на 8 и т. Д.)
Это может помочь увидеть адреса в двоичном, а не в десятичном виде. В двоичном виде 10.10.15.0 будет записано:
00001010.00001010.00001111.00000000
В / 23 первые 23 бита являются префиксом сети, а остальные 9 - идентификатором хоста:
00001010.00001010.0000111 1.00000000
|<- Network prefix ->| |<-Host->|
Обратите внимание, что хост-часть этого адреса не является всеми нулями, поэтому это не первый адрес в блоке; это было бы:
00001010.00001010.0000111 0.00000000 = 10.10.14.0
Аналогично, последний адрес будет иметь все единицы в хост-части:
00001010.00001010.0000111 1.11111111 = 10.10.15.255
Кстати, если вы развернете 10.10.16.255 в двоичном виде, это будет выглядеть так:
00001010.00001010.0001000 0.11111111
... который показывает, что у него нет того же сетевого префикса, и поэтому он не находится в том же блоке.