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;我想在堆栈溢出中重复检查这个问题,如果这是错误的,我所做的或者有任何内置的函数做同样的事情。
发布于 2014-11-19 05:47:23
不,它不是。它将在二进制表示中包含相邻1s的任何数字上失败,因为它们将在Split('0')之后以一个字符串的形式在一起,因此与(x => x == "1")不匹配。举个例子,试试3。
因为string实现了IEnumerable<char>,所以您可以在直接查看字符时使用与您类似的想法:
Convert.ToString(l8, 2).Count(c => c == '1')
当然还有其他的cleverer solutions。
https://stackoverflow.com/questions/27009570
复制相似问题