如果我有二进制数0111000111111, 是否有任何快速算法来计算1的数量?
如果0111000111111是一个字符串(例如" 0111000111111") 是否有任何快速算法来计算字符串中的1的数量?
答案 0 :(得分:2)
一种相对快速的方法是预先计算所有字节值的位计数表,并对(无符号)整数的四个字节求和。
byte NB[256]= { 0, 1, 1, 2, 1, 2, 2, 3, 1, 1, ... };
N= NB[U & 255] + NB[(U >> 8) & 255] + NB[(U >> 16) & 255] + NB[(U >> 24) & 255];
您可以根据每个切片的不同位数进行调整。