Я сталкиваюсь с очень сложной проблемой с манипулированием битами.
Насколько я знаю, наименьший размер переменной для хранения значения составляет один байт из 8 бит. Битовые операции, доступные в C / C ++, применяются ко всей единице байтов.
Представьте, что у меня есть карта для замены двоичного шаблона 100100 (6 бит) на сигнал 10000 (5 бит). Если 1-й байт входных данных из файла равен 10010001 (8 бит), сохраняемых в переменной типа char, его часть соответствует 6-битному шаблону и поэтому заменяется 5-битным сигналом для получения результата 1000001 (7 бит) ,
Я могу использовать маску для манипулирования битами в байте, чтобы получить результат от самых левых битов до 10000 (5 бит), но самые правые 3 бита очень сложно манипулировать. Я не могу сдвинуть самые правильные 3 бита исходных данных, чтобы получить правильный результат 1000001 (7 бит), за которым следует 1 бит заполнения в этой переменной char, которая должна быть заполнена 1-м битом следующего, за которым следует байта ввода.
Интересно, может ли C / C ++ действительно выполнять такую замену битовых шаблонов длины, которые не вписываются в переменную Char (1 байт) или даже в Int (4 байта). Может ли C / C ++ добиться цели, или мы должны пойти на другие языки ассемблера, которые имеют дело с однобитными манипуляциями?
Я слышал, что Power Basic может выполнять побитовые манипуляции лучше, чем C / C ++.