Add bitpop16() in util.c.

This commit is contained in:
tmk 2012-11-24 16:34:59 +09:00
parent 83f0e800e5
commit 94b4fba6e6
2 changed files with 11 additions and 2 deletions

View File

@ -22,7 +22,7 @@ uint8_t bitpop(uint8_t bits)
{ {
uint8_t c; uint8_t c;
for (c = 0; bits; c++) for (c = 0; bits; c++)
bits &= bits -1; bits &= bits - 1;
return c; return c;
/* /*
const uint8_t bit_count[] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4 }; const uint8_t bit_count[] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4 };
@ -30,6 +30,14 @@ uint8_t bitpop(uint8_t bits)
*/ */
} }
uint8_t bitpop16(uint16_t bits)
{
uint8_t c;
for (c = 0; bits; c++)
bits &= bits - 1;
return c;
}
// most significant on-bit - return highest location of on-bit // most significant on-bit - return highest location of on-bit
uint8_t biton(uint8_t bits) uint8_t biton(uint8_t bits)
{ {

View File

@ -16,7 +16,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef UTIL_H #ifndef UTIL_H
#define UTIL_H 1 #define UTIL_H
#include <stdint.h> #include <stdint.h>
@ -29,6 +29,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
uint8_t bitpop(uint8_t bits); uint8_t bitpop(uint8_t bits);
uint8_t bitpop16(uint16_t bits);
uint8_t biton(uint8_t bits); uint8_t biton(uint8_t bits);
#endif #endif