繁体   English   中英

clang 的 32 位内置人口计数 long long integer c++

[英]32 bit builtin population count for clang counts long long integer c++

我将__builtin_popcount与 clang 编译器一起使用,我需要计算一个 64 位数字( unsigned long longuint64_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 longunsigned long的转换是无损的,您也可以将__builtin_popcountl用于 64 位数字。

int保证为 16 位或更宽, long保证为 32 位或更宽, long long保证为 64 位或更宽。 这意味着您始终可以将__builtin_popcountl与 32 位数字一起使用,并且您可能会或可能无法将其与 64 位数字一起使用(在这种情况下您可以)。

相关问题: 64 位 Windows 上 long 的位大小是多少?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM