Вопросы с тегом «bit-manipulation»

139
Почему это случайное значение имеет распределение 25/75 вместо 50/50?

Изменить: Итак, в основном то, что я пытаюсь написать, - это 1-битный хеш double. Я хочу сопоставить doubleс trueили falseс вероятностью 50/50. Для этого я написал код, который выбирает некоторые случайные числа (просто в качестве примера я хочу использовать это для данных с регулярностью и все же...

125
Что лучше использовать #define, enum или const?

В проекте C ++, над которым я работаю, у меня есть значение типа флага, которое может иметь четыре значения. Эти четыре флага можно комбинировать. Флаги описывают записи в базе данных и могут быть: новый рекорд удаленная запись измененная запись существующая запись Теперь для каждой записи я хочу...

121
Позиция установленного младшего бита

Я ищу эффективный способ определения позиции младшего значащего бита, который установлен в целое число, например, для 0x0FF0 это будет 4. Тривиальная реализация такова: unsigned GetLowestBitPos(unsigned value) { assert(value != 0); // handled separately unsigned pos = 0; while (!(value & 1)) {...

119
Каков самый быстрый / самый эффективный способ найти самый высокий установленный бит (msb) в целом числе в C?

Если у меня есть целое число n, и я хочу знать позицию самого старшего бита (то есть, если младший бит находится справа, я хочу знать позицию самого дальнего левого бита, равного 1), какой способ узнать самый быстрый / эффективный? Я знаю, что POSIX поддерживает ffs()метод в strings.h для поиска...

110
В C / C ++ каков самый простой способ изменить порядок бит в байте?

Хотя есть несколько способов изменить порядок следования битов в байтах, мне любопытно, что «проще всего» реализовать разработчику. Под реверсом я подразумеваю: 1110 -> 0111 0010 -> 0100 Это похоже, но не дублирует этот вопрос PHP. Это похоже, но не дублирует этот вопрос C. Этот вопрос...

103
Побитовая операция и использование

Рассмотрим этот код: x = 1 # 0001 x << 2 # Shift left 2 bits: 0100 # Result: 4 x | 2 # Bitwise OR: 0011 # Result: 3 x & 1 # Bitwise AND: 0001 # Result: 1 Я могу понимать арифметические операторы в Python (и других языках), но я никогда не понимал достаточно хорошо «побитовые» операторы....

100
Как мне получить побитовые данные из целочисленного значения в C?

Я хочу извлечь биты десятичного числа. Например, 7 - это двоичный 0111, и я хочу получить 0 1 1 1 все биты, хранящиеся в bool. Как я могу это сделать? Хорошо, цикл - не лучший вариант, могу я сделать что-нибудь еще для этого?...

96
Лучшие практики для операций кругового сдвига (поворота) в C ++

Операторы сдвига влево и вправо (<< и >>) уже доступны в C ++. Однако я не мог понять, как я могу выполнять операции кругового сдвига или поворота. Как можно выполнять такие операции, как «Повернуть влево» и «Повернуть вправо»? Здесь дважды вращается вправо Initial --> 1000 0011...

94
Операции приоритета и битовой маски

Я столкнулся с (казалось бы) очень странным случаем. Возьмите число 2 ( 0b10) и замаскируйте его с помощью 1 ( 0b01) Это должно произвести 0b00что эквивалентно 0. Однако здесь появляется г-н Шредингер: var_dump(0b10 & 0b01); // int(0) var_dump(0b10 & 0b01 == 0); // int(0) var_dump(0b10...

94
Какой самый простой способ проверить, является ли число в C ++ степенью двойки?

Мне нужна такая функция: // return true iff 'n' is a power of 2, e.g. // is_power_of_2(16) => true is_power_of_2(3) => false bool is_power_of_2(int n); Кто-нибудь может подсказать, как я мог это написать? Можете ли вы назвать мне хороший веб-сайт, где можно найти такой алгоритм?...

93
Что такое CHAR_BIT?

Цитата из кода для вычисления целочисленного абсолютного значения (абс) без перехода из http://graphics.stanford.edu/~seander/bithacks.html : int v; // we want to find the absolute value of v unsigned int r; // the result goes here int const mask = v >> sizeof(int) * CHAR_BIT - 1; r = (v +...

87
C / C ++: принудительный порядок и выравнивание битовых полей

Я читал, что порядок битовых полей в структуре зависит от платформы. Что если я использую различные параметры упаковки для конкретного компилятора, будут ли эти данные гарантии храниться в правильном порядке по мере их написания? Например: struct Message { unsigned int version : 3; unsigned int...

84
Есть ли элегантный и быстрый способ проверить, что 1-бит целого числа находится в непрерывной области?

Мне нужно проверить, образуют ли позиции (от 0 до 31 для 32-битного целого числа) с битовым значением 1 непрерывную область. Например: 00111111000000000000000000000000 is contiguous 00111111000000000000000011000000 is not contiguous Я хочу, чтобы этот тест, то есть какая-то функция...

84
Приходилось ли вам когда-нибудь использовать битовый сдвиг в реальных проектах?

Приходилось ли вам когда-нибудь использовать битовый сдвиг в реальных проектах программирования? В большинстве (если не во всех) языках высокого уровня есть операторы сдвига, но когда вам действительно нужно их использовать?...

83
Вычитание / добавление насыщения для беззнаковых байтов

Представьте, что у меня есть два байта без знака bи x. Мне нужно рассчитать bsubкак b - xи baddкак b + x. Однако я не хочу, чтобы во время этих операций происходило переполнение / переполнение. Например (псевдокод): b = 3; x = 5; bsub = b - x; // bsub must be 0, not 254 и b = 250; x = 10; badd = b...