__builtin Ч2



Предыдущий пост получил неожиданное продолжение благодаря нашим подписчикам - Сергею Нефедову и @Roman657. Взаимопомощь и отзывчивость всегда помогает добиваться бо́льшего 😃



Как было подмечено, строго говоря, использование __builtin функции сопряжено с потенциальными рисками. Например, список аргументов поменяется в будущих версиях компилятора или код нельзя будет скомпилировать на другой платформе...



На практике нам неизвестны такие печальные истории, но если вы сомневаетесь — для вас есть другое решение 😉



Начиная с C++20 появляется стандартизированная поддержка некоторых нетривиальных битовых операций. Библиотека bit предоставляет набор реализаций. Рассмотрим некоторые из них:



std::has_single_bit - проверяет целое число на степень двойки.



std::popcount - подсчитывает количество установленных битов в целом числе.



std::countl_zero - подсчитывает количество нулей "слева" у целого числа.



std::countr_zero - подсчитывает количество нулей "справа" у целого числа.



std::rotr - выполняет циклический сдвиг битов вправо для целого числа.



std::rotl - выполняет циклический сдвиг битов влево для целого числа.



Живой пример: ссылка.



Могу еще отметить, что это еще и шаблонные constexpr функции 😋



#cpp20 #STL