如何计算某char变量bit位为1的总数目?

来源:互联网 发布:淘宝网休闲套装 编辑:程序博客网 时间:2024/04/29 19:56

如何计算某char变量bit位为1的总数目?
比如:
char c = 'a';
而'a'二进制是01100001,所以起bit位为1的总数目是3。
请问这个如何实现?谢谢。
据说还可以有空间优化和时间优化等不同实现?

-------------eGust (就像矗立在彩虹之巅)-------------

 

比起
x = (x & 0x55) + ((x >> 1) & 0x55);
x = (x & 0x33) + ((x >> 2) & 0x33);
x = (x & 0x0F) + ((x >> 4) & 0x0F);
来,应该也不会慢吧,这个毕竟要进行15次以上的运算,虽然都是在寄存器里弄
查表只要一条指令就够了,就算没有cache上应该不会慢这么多吧,而且多次访问的话应该更快才对
x86好像也没有直接数的指令


-------------vonNeumann (沉默的大多数)-------------

如果只是偶尔调用一次,应该 eGust 那个更快吧。如果频繁调用,估计查表快。我猜的。

原理:
假设原数是 [abcdefgh],每一个字母代表 0 或 1,要求的是 a+b+c+d+e+f+g+h

第一步以后,变成 [a+b][c+d][e+f][g+h],每个方括号 2 bits
第二步以后,变成 [a+b+c+d] [e+f+g+h],每个方括号 4 bits
第三步以后,[a+b+c+d+e+f+g+h]

原创粉丝点击