GCC & Clang - Найти первый установленный бит в Word с помощью встроенных функций - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь найти первый установленный бит в машинном слове.Следующий фрагмент взят из реализации bitset в GCC, которую я изменил, чтобы использовать для маскирования первых x битов, которые я хочу пропустить.

  // mask off bits below bound
 __thisword &= (~static_cast<_WordT>(0)) << _S_whichbit(__start_from);
 auto index = __builtin_ffs(__thisword);

Проблема в том, что два раза.

  • Половина документации в Google гласит, что __builtin_ffs занимает unsigned int, а другая половина - int.Версия GCC, которую я использую, ожидает int.

  • Это вызывает мою вторую проблему, если я использую int как _WordT, это вызывает неопределенное поведение во время левого сдвига.Если я использую unsigned int как тип, я получаю ошибку изменения знака, потому что __builtin_ffs ожидает int.

Использование сдвига влево с int дает правильный результат, но спредупреждения.Что может быть обходным путем для этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...