如果参数的uint64类型为

时间:2017-02-22 12:53:12

标签: c++ bit-manipulation

当我尝试这段代码时,它输出0而不是dseried结果,即35

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

如果不使用34,我使用的是一些小于32的vale,它运行正常,所以我假设我的编译器没有使用正确的ffs,或者ffs不支持所有64位类型?

在这种情况下我该怎么办?我想使用ffs,因为我希望我的代码尽可能快,并且我听说ffs有一个重要的实现。

我在Ubuntu上使用g ++和Xeon处理器

1 个答案:

答案 0 :(得分:3)

ffs() man pageffs()接受一个int参数。

尝试使用ffsll()代替:

int ffsll(long long int i);