Shift-with-carry не имеет смысла в языке высокого уровня (даже C), потому что нет способа прочитать флаг переноса (ранее старший бит) из таких языков, кроме более встроенной сборки.
С другой стороны, если вы сохраняете старший бит в другой переменной (а также выполняете операцию сдвига), компилятор может сгенерировать сдвиг с переносом с последующим добавлением переноса или переноса переноса, чтобы получить его там. Компиляторы также достаточно хороши для объединения двух инструкций в инструкции с многократным сложением.
Глядя на ваш исправленный вопрос, операция, которую вы пытаетесь выполнить, совершенно не связана с какой-либо инструкцией сдвига с переносом, доступной на распространенных процессорах. Поскольку вы хотите сдвинуться на единицу, а затем очистить старший значащий бит, может оказаться полезной инструкция bsr
, многие компиляторы имеют встроенных функций , которые предоставляют вам доступ к этой инструкции из кода C.