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;
我想在堆栈溢出中仔细检查这个问题,如果这是错的我做了什么,或者是否有任何内置函数都这样做。
答案 0 :(得分:3)
不,不是。它将在其二进制表示中具有相邻1的任何数字上失败,因为它们将在Split('0')
之后合并在一个字符串中,因此不匹配(x => x == "1")
。例如,尝试3。
由于string
实现IEnumerable<char>
,您可以在直接查看字符时使用与您类似的想法:
Convert.ToString(l8, 2).Count(c => c == '1')
当然还有其他cleverer solutions。