[英]32 bit builtin population count for clang counts long long integer c++
我将__builtin_popcount
与 clang 编译器一起使用,我需要计算一个 64 位数字( unsigned long long
或uint64_t
)。 查了一下, __builtin_popcount
为 16 位, __builtin_popcountl
为 32 位, __builtin_popcountll
为 64 位。 当我测试它时, __builtin_popcountl
能够对 64 位整数进行计算。 有人知道这是什么原因吗?
#include <iostream>
int main() {
unsigned long long bb = 0b1000000100000001000000010000000100000001000000010000000100000001;
std::cout << __builtin_popcountl(bb) << std::endl; //returns 9 (correct answer)
}
int __builtin_popcountl (unsigned long)
用于unsigned long
s。
int __builtin_popcountll (unsigned long long)
用于unsigned long long
s。
unsigned long
在您的平台上是 64 位的,因此从unsigned long long
到unsigned long
的转换是无损的,您也可以将__builtin_popcountl
用于 64 位数字。
int
保证为 16 位或更宽, long
保证为 32 位或更宽, long long
保证为 64 位或更宽。 这意味着您始终可以将__builtin_popcountl
与 32 位数字一起使用,并且您可能会或可能无法将其与 64 位数字一起使用(在这种情况下您可以)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.