簡體   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