Заранее сорри за идиотский вопрос, но по какому алгоритму сие вычисляется? Очень хочется пример на си (так уж исторически сложилось, что с битовыми масками никогда дела не имел)
Это то как раз понятно) Вопрос скорее в том, как это грамотно посчитать. Пока я обощелся грязным хаком - тупо набил таблицу возможных значений, для данной задачи сойдет, но в будущем чувствую придется это все-таки осваивать.
з.ы. Вот они, минусы освоения программирования исключительно на практике
О неполных октетах:
При выборе маски подсети разрешается использовать маску только с подряд идущими слева единицами. Поэтому для каждого октета есть только 9 допустимых комбинаций:
00000000 (0)
10000000 (128)
11000000 (192)
11100000 (224)
11110000 (240)
11111000 (248)
11111100 (252)
11111110 (254)
11111111 (255)
/******************************************************************************
****************/
template< typename T > inline
size_t BitCount( T value )
{
size_t res = 0;
while( value != 0 )
{
value &= value - 1;
++res;
}
return res;
}
В общем случае перевести так нельзя, только на практике в большинстве случаев - да. Нужно чтобы маска была вида 111...10....0. Вот обратную сторону всегда можно. Поэтому такое нужно делать только в случае, когда хочется юзеру вывести понятнее.
> Ну ни фига себе, Ъ-метод.
Не совсем Ъ. Во-первых нужна проверка, что можно свести к /N виду. Во-вторых количество бит __builtin_popcount() считает быстрее.
К счастью, ни разу не попадались, да и в ступороз это вгоняет, когда нужно подсетки посчитать. Но, теоретически работать дырявая маска будет также, как и сплошная.
> К счастью, ни разу не попадались, да и в ступороз это вгоняет, когда нужно подсетки посчитать. Но, теоретически работать дырявая маска будет также, как и сплошная.
В спецификацию ткнуть не могу, т.к. лень, но ifconfig на дырявую маску мне выдал SIOCSIFNETMASK: Invalid argument.
Я это читал в учебнике по маршрутизации. Если интересно, могу дома поискать его. ip тоже не проглатывает такие маски, поэтому я могу только цитировать теорию.
есть rfc 4632 - Internet Best Current Practices
видимо в диких интернетах работает только cidr
у себя в локалке можешь воротить всё что хочешь
например dlink dwl 2100 кушает дырявую маску
В 14 лет на школьном факультативе изучали арифметику в системах счисления с произвольным основанием. Того единственного часа занятий мне и сейчас хватает, чтобы не задаваться такими вопросами. Чего и Вам советую. Сейчас я даже не могу сказать, знаю ли я это на память или считаю за секунду-другую. Как-то само всплывает.
Все эти сишные коды, таблицы, калькуляторы -- от лукавого. Ты алгоритм пойми, сложи-умножь столбиком 13-ричные числа, подели уголком 7-ричные, переведи из 3-ричной в 11-ричную и после этого вся эта чешуя тебе будет - семечки.