2017-02-22 5 views
0

Когда я пытаюсь этот код, он выводит данные 0 вместо dseried результата, который 35FFS не возвращает правильный результат, если ее аргумент типа UInt64

uint64_t er = (uint64_t)1 << 34; 
cout << ffs(er); 

Если вместо 34 я использую некоторые юдоль меньше чем 32, он работает отлично, поэтому я предполагаю, что мой компилятор не использует правильные ffs, или это то, что ffs не поддерживает вообще 64-битные типы?

Что делать в этом случае? Я хочу использовать ffs, так как я хочу, чтобы мой код был самым быстрым, и я слышал, что ffs имеет существенную реализацию.

я на Ubuntu с помощью G ++ и процессор Xeon

ответ

3

Из ffs() man page, ffs() принимает параметр Int.

Попробуйте использовать ffsll() вместо того, чтобы:

int ffsll(long long int i); 
Смежные вопросы