Как я могу отключить самый значимый установленный бит слова (например, 0x00556844 -> 0x00156844)? В gcc есть __ builtin_clz
, но он просто считает нули, что мне не нужно. Кроме того, как мне заменить __builtin_clz на компилятор msvc или intel c?
Текущий мой код -
int msb = 1<< ((sizeof(int)*8)-__builtin_clz(input)-1);
int result = input & ~msb;
ОБНОВЛЕНИЕ: Хорошо, если вы говорите, что этот код довольно быстрый, я спрошу вас, как мне добавить переносимость к этому коду? Эта версия предназначена для GCC, но для MSVC и ICC?