问题描述:
如何计算一个字节二进制表示中“1”的个数。
1. 最简单的,对所有的位遍历一遍可以统计所有1的个数。但如何遍历是一个问题。一是除以2,一是移位。
2. 最主要的是这个方法(巧的很)!
写弄上代码,方便说明:
int Count(Byte v) { int num = 0; while(v) { v &= (v-1); num++; } }
v&(v-1)每次消掉了从右数的第一个1。
3. 书上提出最后一种数组索引的方法,以空间换时间。只用O(1)时间就可以解决问题。虽然这费时间,但提供了一种解决问题的思路。