Это выглядит неэффективно, и, возможно, это то, на что ссылался Натан.
при условии, что в этом коде используется 8-битный символ, есть две вещи, которые нужно сделать, чтобы сначала переместить целые байты, например, если вашвходной массив равен 0x00,0x00,0x12,0x34, и вы сдвигаете влево на 8 битов, затем вы получаете 0x00 0x12 0x34 0x00, нет причин делать это в цикле 8 раз по одному биту за раз.поэтому начните со смещения целых символов в массиве на (смещение >> 3) местоположения и заполните пробелы, созданные нулями, своего рода для (ra = (смещение >> 3); ra> 3)] = array [ra];для (ра - = (смещения >> 3); ра> (7- (смещение & 7))).хороший компилятор будет предварительно вычислять (смещение >> 3), смещение & 7, 7- (смещение & 7), а у хорошего процессора будет достаточно регистров, чтобы сохранить все эти значения.Вы могли бы помочь компилятору, создав отдельные переменные для каждого из этих элементов, но в зависимости от компилятора и от того, как вы его используете, это может ухудшить ситуацию.
Суть в том, что код времени.выполните тысячу сдвигов в 1 бит, затем тысячу сдвигов в 2 бита и т. д., и т. д., а затем попробуйте другой алгоритм и рассчитайте его таким же образом и посмотрите, будут ли оптимизации иметь значение, лучше или хуже.Если вы заранее знаете, что этот код будет использоваться только для однократных или менее 8-битных сдвигов, соответственно скорректируйте тест синхронизации.
использование вами флага переноса подразумевает, что вы знаете, что многие процессоры имеют инструкции специальнодля объединения бесконечно длинных сдвигов с использованием стандартной длины регистра (для одного бита за раз), в основном, используйте переход через перенос.Который язык C не поддерживает напрямую.для объединения однобитовых сдвигов вы можете рассмотреть ассемблер и, вероятно, превзойти C-код.по крайней мере, сдвиги одного бита быстрее, чем может сделать C-код.Гибрид перемещения байтов тогда, если число битов для сдвига (смещение & 7) может быть меньше 4, используйте ассемблер, иначе используйте цикл C.снова тесты синхронизации покажут вам, где находятся оптимизации.