__builtin_popcount - 这在 C# 中是等效的

本文关键字:builtin popcount 这在 | 更新日期: 2023-09-27 18:31:00

https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html 说

— 内置函数:int __builtin_popcount(无符号 int x)返回 x 中的 1 位数。

所以做同样的事情,我在 c# 中尝试了以下代码

        long l8 = 9;
        int iCont = Convert.ToString(l8, 2).Split('0').ToList().FindAll(x=>x=="1").Count;

我想在堆栈溢出中仔细检查这个问题,如果这是错误的,或者是否有任何内置函数做同样的事情。

__builtin_popcount - 这在 C# 中是等效的

不,不是。 它在其二进制表示中具有相邻 1 的任何数字上都会失败,因为它们将在 Split('0') 后放在一个字符串中,因此不匹配(x => x == "1") 。 例如,尝试 3。

因为string实现了IEnumerable<char>,所以在直接看角色的同时,你可以使用与你类似的想法:

Convert.ToString(l8, 2).Count(c => c == '1')

当然,还有其他更聪明的解决方案。