Удобные способы работы с большой битовой маской - PullRequest
3 голосов
/ 13 сентября 2011

Я пытаюсь реализовать алгоритм в приложении для iOS, который будет использовать большие битовые маски. Каждая битовая маска может иметь длину до 256 бит (32 байта). Мне нужно будет быстро получить / установить биты в произвольных местах внутри маски и т. Д.

Существуют ли какие-либо встроенные языковые функции C или Objective-C, которые упрощают подобные вещи, или я должен ожидать написать свои собственные функции для манипулирования битами в произвольных символьных массивах? Не кажется, что было бы слишком сложно сделать это самому, но если уже есть что-то, что делает это эффективно и чисто, я бы не стал писать свой.

Ответы [ 4 ]

3 голосов
/ 13 сентября 2011

Взгляните на CFMutableBitVector , который предназначен для решения подобных проблем.

0 голосов
/ 13 сентября 2011

Библиотека LibTomMath имеет логические операции, необходимые для целых чисел произвольного размера.

Apple iOS Accelerate Framework предположительно предоставляет логические операции над 256-битными целыми числами (а такжекак другие размеры до 1024 бит), но документация отрывочна.

0 голосов
/ 13 сентября 2011

Ну, 32 байта не особенно велики.

Вы можете получить / установить биты, создав массив из 8 байтов маски, проиндексировав массив с младшими 3 битами бита # и используяоставшиеся 5 битов бита # для адресации массива байтов, содержащих биты.

Я не помню, чтобы в стандартной библиотеке языка C и / или / xor выполнялись операции с байтовыми строками, но это не сложнонаписать, например, функцию для выполнения andbytes(target, source, count), чтобы выполнять операции между наборами ваших битов.

Главное, что вам нужно сделать, - это выяснить, как вы будете управлять хранилищем для вашего бита.массивы.Если они зафиксированы в 256 битах, то имеет смысл сделать их объектами Objective-C с массивом char [8], содержащим биты.

0 голосов
/ 13 сентября 2011

Вы можете посмотреть на std :: bitset из C ++ STL.

...