2015-12-31 13 views
0

Я портирую код, написанный на Java до C11. Java-код использует BitSet для перевода флип-бит в вектор. Я знаю, что есть соответствующий BitSet для C++, но я не уверен, есть ли что-то подобное для c11. Я должен использовать c11 для каждого требования. Я не слишком хорошо знаком с более новым набором функций в c11, так как большинство моих предыдущих кодов были либо в ANSI-C, либо в C99.Поддержка BitSet в c11

Это что-то вроде этого доступно в C (C11) или мне нужно написать свою собственную функцию, которая отображается в группу памяти, а затем использует операторы бит?

+3

Я собираюсь удалить Java-тег, так как этот вопрос не имеет отношения к Java (кроме использования класса Java в качестве сокращенного описания вашего желаемого поведения). Но учтите, что вопросы, связанные с инструментами или библиотеками [отключены от переполнения стека] (http://stackoverflow.com/help/on-topic), поэтому этот вопрос может быть закрыт в любом случае. – yshavit

+0

Что не так с простым 'OR'ing /' AND'ing ?? –

+0

Дублирующий вопрос более или менее отвечает на вопрос, поэтому спасибо, что указали это. Основной вопрос отличается, хотя, поскольку я спрашиваю, поддерживает ли C11 BitSit или нет, а не как реализовать. Я не спрашиваю конкретно, как его реализовать, и я не прошу библиотеки; это вопрос языка C11. Это не в тему? – Andy

ответ

2

В C (C11 или в противном случае) не существует BitSet. C имеет прямой доступ к памяти, поэтому вы можете просто использовать типы данных напрямую. Например, бит с 8 битами можно сделать с помощью uint8_t следующим образом.

Использование

uint8_t bitset = 0; 
bitset = bitset | (1 << 4); // set 4th bit, like BitSet.set(4) 
bitset = bitset & ~(1 << 3); // unset 3rd bit, like BitSet.clear(3) 
bitset = ~bitset; // flip the bits, like BitSet.flip(0, 7) 
bitset = bitset^(1 << 4); // flip the 4'th bit like BitSet.flip(4) 

Подробнее о поразрядных операторах в https://en.wikipedia.org/wiki/Bitwise_operations_in_C

+0

Если вы хотите сделать его более полным, отдельные отдельные биты будут выполняться с помощью 'xor' ing с' 1' ... BTW, биты отключения не будут работать таким образом ... Это должно быть 'bitset & ~ (1 << 3) '. В любом случае, отредактировал его для вас .. –

+0

Спасибо! Я пытался запомнить, как переворачивать отдельные биты. И хороший улов .. Bitshifting 0 не имеет никакого смысла. – AlexPogue

+0

Спасибо за ответ! Поскольку векторы имеют длину не менее тысячи бит, я вместо этого буду использовать метод, описанный в связанном ответе. Извините за отсутствие этого при поиске ответа. – Andy

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^