__builtin_popcount - 这在C#中是等价的吗?

时间:2014-11-19 05:24:21

标签: c# gcc

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

- 内置函数:int __builtin_popcount(unsigned int x) 返回x中的1位数。

同样,我在c#

中尝试了以下代码
        long l8 = 9;
        int iCont = Convert.ToString(l8, 2).Split('0').ToList().FindAll(x=>x=="1").Count;

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

1 个答案:

答案 0 :(得分:3)

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

由于string实现IEnumerable<char>,您可以在直接查看字符时使用与您类似的想法:

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

当然还有其他cleverer solutions