代码链接见:https://wandbox.org/permlink/sIdpRyLe4utkecEq
C++20提供了一个新的 <bit> 头文件用于提供一些位运算,其中popcount可用于统计一个数目中1的个数。 如果你想统计一个2/8/16进制数目中1的个数,这个函数就非常方便了:
#include <bit>
#include <bitset>
#include <cstdint>
#include <initializer_list>
#include <iostream>
int main()
{
for (std::uint8_t i : { 0, 0b11111111, 0b00011101 }) {
std::cout << "popcount(0b" << std::bitset<8>(i) << ") = "
<< std::popcount(i) << '\n';
}
}
/*
output:
popcount(0b00000000) = 0
popcount(0b11111111) = 8
popcount(0b00011101) = 4
*/