__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;
我想在堆栈溢出中仔细检查这个问题,如果这是错误的,或者是否有任何内置函数做同样的事情。
不,不是。 它在其二进制表示中具有相邻 1 的任何数字上都会失败,因为它们将在 Split('0')
后放在一个字符串中,因此不匹配(x => x == "1")
。 例如,尝试 3。
因为string
实现了IEnumerable<char>
,所以在直接看角色的同时,你可以使用与你类似的想法:
Convert.ToString(l8, 2).Count(c => c == '1')
当然,还有其他更聪明的解决方案。