在不使用for或while循环且不使用大于0xFF的常量的情况下,用C计算32位整数x中1的个数的最佳方法是什么?在一个整数中计算1的个数C
我想到的是将x 24向右移动并计算移位整数中的多少个1,并将其存储在变量计数中。然后,将x 16向右移位,并按移位整数中的1的数量递增计数,依此类推。
那么,有更好的解决方案的任何想法?
在不使用for或while循环且不使用大于0xFF的常量的情况下,用C计算32位整数x中1的个数的最佳方法是什么?在一个整数中计算1的个数C
我想到的是将x 24向右移动并计算移位整数中的多少个1,并将其存储在变量计数中。然后,将x 16向右移位,并按移位整数中的1的数量递增计数,依此类推。
那么,有更好的解决方案的任何想法?
代码严重依赖于实现定义的行为,即不可移植。它还可以调用未定义的行为,对<25位“int”的平台上的偏移计数过大。移位有符号整数有问题。避免它,除非你能保证符号位不参与(这意味着:只是避免它)。 – Olaf
您的意思是数字的二进制表示或数字的二进制表示 – Mitchel0022
二进制表示的数字 –