[英]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.