Как использовать интринсик
#pragma intrinsic(_BitScanForward)
В моем коомпиляторе не поддерживает я библиотека intrin.h
У gcc есть аналогичный интринсик __builtin_ctz. Согласно википедии, должен работать и в clang.
Документация на _BitScanForward:
Search the mask data from least significant bit (LSB) to the most significant bit (MSB) for a set bit (1).
Parameters
[out] Index Loaded with the bit position of the first set bit (1) found.
Remarks
If a set bit is found, the bit position of the first set bit found is returned in the first parameter. If no set bit is found, 0 is returned; otherwise, 1 is returned.
Документация на __builtin_ctz в gcc:
Built-in Function: int __builtin_ctz (unsigned int x)
Returns the number of trailing 0-bits in x, starting at the least significant bit position. If x is 0, the result is undefined.
Эти определения кажутся равносильными (но _BitScanForward возвращает результат через out-параметр, а не через возвращаемое значение), за исключением случая нулевого аргумента. В этом случае _BitScanForward возвращает нулевой результат. Для clang вам нужно либо проверять на 0 параметр, либо воспользоваться аналогичным __builtin_ffs (который возвращается результат на единицу больше).
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники