Самый быстрый способ перевернуть значение логического значения

Я пытаюсь найти самый быстрый способ перевернуть 9X_bit-fiddling значение логического значения в rust? то 9X_boolean-expression есть

false => true true => false 

Для моего приложения меня не волнует 9X_bool текущее значение логического значения, а 9X_bit-manipulation только то, что оно перевернуто. Для моего 9X_bitwise приложения (Решето Аткина — улучшенная версия 9X_bitwise Решета Эратосфена) это нужно будет выполнять 9X_bit-fiddling большое количество раз, поэтому было бы 9X_bit-fiddling хорошо, чтобы оно работало как можно быстрее. В 9X_rust настоящее время мой код:

item[i] = !item[i] 

Поскольку (как уже 9X_bitwise упоминалось) текущее значение элемента [i] не 9X_boolean-expression имеет значения, я уверен, что есть более 9X_boolean-expression быстрый (возможно, побитовый) способ сделать 9X_bool это. Тем не менее, я немного ржавый нуби 9X_boolean и не смог его найти, может ли кто-нибудь 9X_bit-fiddling посоветовать мне лучший способ?

Спасибо,

4
0
2
Общее количество ответов: 2

Ответ #1

Ответ на вопрос: Самый быстрый способ перевернуть значение логического значения

Неважно. Компилятор перехитрит вас в этом 9X_bit-manipulation и выберет самый быстрый из известных ему 9X_rust методов. Точный синтаксис, который вы используете, не 9X_bit-twiddling важен. Однако это только в том случае, если вы не забыли включить оптимизацию. Вы можете подумать, что это очевидно, но 9X_bit-twiddling это очень распространенная ошибка. Это делается 9X_bit-fiddling с помощью --release при создании или запуске вашего 9X_bool проекта с помощью груза. Если вы забудете 9X_boolean-expression об этом шаге, компилятор даже не попытается 9X_boolean ускорить ваш код, и синхронизация выполнения 9X_bool кода станет бессмысленной.

Более важно то, как 9X_bitwise вы получаете доступ к памяти, в которой 9X_rust находится логическое значение. Старайтесь 9X_boolean хранить память, с которой вы работаете, в 9X_boolean-expression стеке, если вы выполняете много работы с 9X_bitwise одним значением или небольшой областью за 9X_boolean раз. Локальность кэша также означает, что 9X_bitwise будет быстрее читать соседние строки кэша, чем 9X_bool перескакивать между местами в памяти. Память, скорее 9X_boolean всего, будет в кеше, если вы обращались 9X_boolean-expression к ней недавно или ЦП догадывается, что вы 9X_rust собираетесь получить к ней доступ.

Существуют 9X_bool также ящики, такие как bit-vec и bitvec, которые сокращают 9X_bool каждое логическое значение до использования 9X_bit-manipulation одного бита. Это отлично подходит для улучшения 9X_rust использования памяти (в 8 раз, если быть 9X_rust точным), но обходится очень небольшими затратами 9X_rust на производительность. Однако я бы избегал 9X_bitwise ящика bitvec. Около месяца назад я сделал несколько 9X_bool тестов, и производительность была просто 9X_rust ужасной.

Вам нужно работать с одним логическим 9X_bit-twiddling значением за раз? Попробуйте работать с 9X_rust целыми словами памяти, если это возможно. Побитовые 9X_rust операции на u64, скорее всего, займут столько 9X_boolean же времени, но вы получите в 64 раза больше 9X_bit-manipulation производительности.

11
0

Ответ #2

Ответ на вопрос: Самый быстрый способ перевернуть значение логического значения

Поскольку в Rust логическая переменная представлена 9X_bit-fiddling ​​​​в виде 8-битного целого числа без знака 9X_bit-twiddling с 0 для false и 1 для true, компилятор может 9X_bitwise реализовать отрицание без ветвления, вычислив 9X_bit-manipulation XOR значения с 1.

При этом, хотя я не знаком 9X_bit-fiddling с решетом Аткина, по крайней мере, для решета 9X_bit-manipulation Эратосфена, вы действительно хотите использовать 9X_bitwise битовые поля, а не логические значения. Но 9X_boolean тот же трюк можно использовать там, чтобы 9X_bool избежать ответвления.

4
0