Существует ли практический предел размеру битовых масок?

Без добавления ссылки вам нужно найти способ вызвать событие в библиотеке классов. Здесь можно использовать WCF, веб-сервер или базу данных.

5
задан nickf 7 October 2008 в 02:44
поделиться

6 ответов

Первое, что пришло на ум я записал бы a set_bit и get_bit функция, которая могла взять массив байтов и небольшого смещения в массиве, и использовать некоторое битовое жонглирование для устанавливания/получения соответствующего бита в массиве. Что-то вроде этого (в C, но надо надеяться Вы получаете идею):

// sets the n-th bit in |bytes|. num_bytes is the number of bytes in the array
// result is 0 on success, non-zero on failure (offset out-of-bounds)
int set_bit(char* bytes, unsigned long num_bytes, unsigned long offset)
{
  // make sure offset is valid
  if(offset < 0 || offset > (num_bytes<<3)-1) { return -1; }

  //set the right bit
  bytes[offset >> 3] |= (1 << (offset & 0x7));

  return 0; //success 
}

//gets the n-th bit in |bytes|. num_bytes is the number of bytes in the array
// returns (-1) on error, 0 if bit is "off", positive number if "on"
int get_bit(char* bytes, unsigned long num_bytes, unsigned long offset)
{
  // make sure offset is valid
  if(offset < 0 || offset > (num_bytes<<3)-1) { return -1; }

  //get the right bit
  return (bytes[offset >> 3] & (1 << (offset & 0x7));
}
3
ответ дан 14 December 2019 в 04:51
поделиться

Я использовал битовые маски в коде файловой системы, где битовая маска много раз больше, чем машинное слово. думайте о нем как "массив булевских переменных";

(журналирование масок во флэш-памяти, если Вы хотите знать),

много компиляторов знают, как сделать это для Вас. Бит Adda OO кодирует, чтобы иметь типы, которые управляют senibly, и затем Ваш код начинает быть похожим, это полно решимости, не некоторый стук бита.

Мои 2 цента.

2
ответ дан 14 December 2019 в 04:51
поделиться

С 64-разрядным целым числом можно сохранить значения до 2^64-1, 64 только 2^6. Таким образом да, существует предел, но если бы Вам нужны больше чем 64 - его ценность флагов, мне очень было бы интересно знать то, что они все делали :)

Сколько состояний, таким образом, необходимо потенциально думать о? Если у Вас есть 64 потенциальных состояния, количество комбинаций, в которых они могут существовать, является полным размером 64-разрядного целого числа.

Если необходимо взволновать приблизительно 128 флагов, то пара битовый векторов была бы достаточна (2^64 * 2).

Дополнение: в Программировании Жемчуга существует расширенное обсуждение использования небольшого массива длины 10^7, реализованный в целых числах (для содержания использовал 800 чисел) - это очень быстро, и очень подходит для задачи, описанной в той главе.

1
ответ дан 14 December 2019 в 04:51
поделиться

Некоторые языки (я полагаю, что жемчуг делает, не уверенный) разрешают поразрядную арифметику на строках. Предоставление Вам намного больший диапазон измерений. ((strlen * символы на 8 битов) комбинации)

Однако я не использовал бы единственное значение для наложения больше чем одного/type/данных. Основной r/w/x триплет 3-разрядного ints, вероятно, был бы верхним "практическим" пределом, не по причинам эффективности пространства, а по практическим причинам разработки.

(Php использует эту систему для управления ее сообщениями об ошибках, и я уже нашел, что это немного чрезмерно, когда необходимо определить значения, где константы php не являются резидентным объектом, и необходимо генерировать целое число вручную, и честно говоря, если бы chmod не поддерживал синтаксис стиля 'ugo+rwx', то я никогда не хотел бы использовать его, потому что я никогда не могу помнить магические числа),

Момент необходимо взломать таблицу констант для отладки кода, Вы знаете, что зашли слишком далеко.

1
ответ дан 14 December 2019 в 04:51
поделиться

Например.NET использует массив целых чисел как внутренняя память для их класса BitArray. Практически вокруг нет никакого другого пути.

Однако в SQL Вы будете нуждаться больше чем в одном столбце (или использовать БЛОБЫ) сохранить все состояния.

0
ответ дан 14 December 2019 в 04:51
поделиться

Вы отметили этот вопрос SQL, таким образом, я думаю, что необходимо консультироваться с документацией для базы данных для нахождения размера целого числа. Затем вычтите один бит для знака, только для сейфа.

Править: В Вашем комментарии говорится использование MySQL. Документация для MySQL 5.0, Числовые Типы указывают, что максимальный размер ЧИСЛОВОГО является 64 или 65 цифрами. Это составляет 212 битов для 64 цифр.

Помните, что Ваш предпочтительный язык должен смочь работать с теми цифрами, таким образом, Вы можете быть ограничены 64-разрядным целым числом так или иначе.

0
ответ дан 14 December 2019 в 04:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: