bit-manipulation- все статьи тега
Коммутативность XOR и mod
Итак, исследуя хэш-функции, я заметил следующее уравнение: ((129*N)^prev)%256 = ((129*N)%256)^prev Для любого числа N, prev между 0 и 255. В принципе, вы можете перетащить операцию mod, не изменяя результат, и это работает только для числа 129. Может быть, кто-нибудь скажет мне, что такого особенного в 129? ...
"Несоответствие типов: невозможно преобразовать int к Byte"
Я видел, как люди задавали вопросы об ошибке "Type mismatch: cannot convert int to byte". Но в основном они вызваны арифметическими операциями. Вот мой случай: (Это происходит, когда я хочу поиграть с битами в Eclipse Kepler) //java 7 binary literals byte a = 0b01111111; //8-bit it compiles byte b = 0b10000000; //8-bit error: Type mismatch: cannot convert int to byte. byte c = (byte) 0b10000000; //8-bit it works fine if casted. Дело в том, что если он равен ...
Почему ((unsigned char) 0x80) <24 получает знак, расширенный до 0xFFFFFFFF80000000 (64-разрядный)?
Следующая программа #include <inttypes.h> /* printf(" %" PRIu32 "n"), my_uint32_t) */ #include <stdio.h> /* printf(), perror() */ int main(int argc, char *argv[]) { uint64_t u64 = ((unsigned char)0x80) << 24; printf("%" PRIX64 "n", u64); /* uint64_t */ u64 = ((unsigned int)0x80) << 24; printf("%016" PRIX64 "n", u64); } Производит FFFFFFFF80000000 0000000080000000 В чем разница между ((unsigned char)0x80) и ((unsigned int)0x80) в этом контексте? Я ...
Сложение двух чисел с помощью битовой манипуляции
Я работаю над следующей практической задачей из GeeksForGeeks : Напишите функцию Add (), которая возвращает сумму двух целых чисел. Функция не должна использовать ни один из арифметических операторов (+, ++, –, -, .. прием). Данное решение в C# имеет вид: public static int Add(int x, int y) { // Iterate till there is no carry while (y != 0) { // carry now contains common set bits of x and y int carry = x & y; // Sum of bits of x and y where at ...
Что такое "дополнение 2"?
Я в курсе компьютерных систем и были борясь, в части, с дополнение. Я хочу понять это, но все, что я прочитал, не принесло мне картину вместе. Я читал статья в Википедии и различные другие статьи, в том числе мой текст книги. следовательно, я хотел начать этот Вики сообщение, чтобы определить, что такое дополнение двух, как его использовать и как оно может влияют на числа во время таких операций, как приведения (от подписанного к беззнаковому и наоборот), битовые операции и операции сдвига бито ...
Наиболее эффективный алгоритм для реверсирования битов (от MSB - >LSB до LSB - >MSB) в C [закрыто]
каков наилучший алгоритм для достижения следующего: 0010 0000 => 0000 0100 преобразование из MSB->LSB в LSB - >MSB. Все биты должны быть обращены; то есть, это не endianness-замена. ...
Что означает двойная Тильда ( ~ ~ ) в Java?
при просмотре исходного кода Guava, я наткнулся на следующий кусок кода (часть реализации hashCode для внутреннего класса CartesianSet): int adjust = size() - 1; for (int i = 0; i < axes.size(); i++) { adjust *= 31; adjust = ~~adjust; // in GWT, we have to deal with integer overflow carefully } int hash = 1; for (Set<E> axis : axes) { hash = 31 * hash + (size() / axis.size() * axis.hashCode()); hash = ~~hash; } hash += adjust; return ~~hash; и adjust и hash are i ...
Что делает (x ^ 0x1)!= 0 означает?
я наткнулся на следующий фрагмент кода if( 0 != ( x ^ 0x1 ) ) encode( x, m ); Что значит x ^ 0x1 в смысле? Это какая-то стандартная техника? ...
Объясните использование битового вектора для определения уникальности всех символов
Я смущен тем, как битовый вектор будет работать для этого (не слишком знаком с битовыми векторами). Вот данный код. Может кто-нибудь провести меня через это? public static boolean isUniqueChars(String str) { int checker = 0; for (int i = 0; i < str.length(); ++i) { int val = str.charAt(i) - 'a'; if ((checker & (1 << val)) > 0) return false; checker |= (1 << val); } return true; } в частности, что такое checker делаешь? ...
Побитовая операция и использование
рассмотрим этот код: 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 (и других языках), но я никогда не понимал "побитовые" операторы достаточно хорошо. В приведенном выше примере (из книги Python) я понимаю левый сдвиг, но не два других. кроме того, для чего на самом деле используются побитовые операторы? Я был бы признат ...
В C/C++ каков самый простой способ изменить порядок битов в байте?
Хотя существует несколько способов изменить порядок битов в байте, мне любопытно, что является "самым простым"для разработчика. И под обращением я имею в виду: 1110 -> 0111 0010 -> 0100 это похоже, но не дубликат этого вопроса PHP. это похоже, но не дубликат этого вопроса C. Этот вопрос задает самый простой метод для реализации разработчиком. "Лучший алгоритм" связан с производительностью памяти и процессора. ...
Вычесть/добавить значение без переполнения и потери значимости
представьте, что у меня есть два байта без знака b и x. Мне нужно вычислить bsub как b - x и badd как b + x. Тем не менее, я не хочу, чтобы во время этих операций возникал underflow/overflow. Например (псевдокод): b = 3; x = 5; bsub = b - x; // bsub must be 0, not 254 и b = 250; x = 10; badd = b + x; // badd must be 255, not 4 очевидный способ сделать это включает в себя ветвление: bsub = b - min(b, x); badd = b + min(255 - b, x); мне просто интересно, есть ли какие-то лучшие способы сд ...
Объясните этот фрагмент, который находит максимум двух целых чисел без использования if-else или любого другого оператора сравнения?
найти максимум из двух чисел. Вы не должны использовать if-else или любой другой оператор сравнения. Я нашел этот вопрос на онлайн-доске объявлений, поэтому я подумал, что должен спросить в StackOverflow пример Вход: 5, 10 Выход: 10 Я нашел это решение, может кто-нибудь помочь мне понять эти строки кода int getMax(int a, int b) { int c = a - b; int k = (c >> 31) & 0x1; int max = a - k * c; return max; } ...
Что такое CHAR бит?
цитирование кода для вычисления целого абсолютного значения (abs) без ветвления от 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 + mask) ^ mask; запатентованный вариант: r = (v ^ mask) - mask; что это CHAR_BIT и как его использовать? ...
Самый простой способ проверить, имеют ли два целых числа один и тот же знак?
какой самый простой способ проверить, имеют ли два целых числа одинаковый знак? Есть ли какой-нибудь короткий побитовый трюк, чтобы сделать это? ...
Быстрый способ генерации псевдослучайных битов с заданной вероятностью 0 или 1 для каждого бита
как правило, генератор случайных чисел возвращает поток битов, для которых вероятность наблюдать 0 или 1 в каждой позиции равна (т. е. 50%). Давайте назовем это непредвзятым PRNG. мне нужно сгенерировать строку псевдослучайных битов со следующим свойством: вероятность увидеть 1 в каждой позиции равна p (т. е. вероятность увидеть 0 равна 1-p). Параметр p является вещественным числом от 0 до 1; в моей задаче бывает, что он имеет разрешение 0,5%, т. е. он может принимать значения 0%, 0.5%, 1%, 1.5 ...
Как добавить два числа без использования ++ или + или другого арифметического оператора
Как добавить два числа без использования ++ или + или любого другого арифметического оператора? Это был вопрос, заданный давным-давно в одном интервью кампуса. Во всяком случае, сегодня кто-то задал вопрос относительно некоторых бит-манипуляций, и в ответах красивый quide Стэнфорд немного вертится был передан. Я потратил некоторое время на его изучение и подумал, что на самом деле может быть ответ на этот вопрос. Я не знаю, я не мог найти ни одного. Делает ответ существует? ...