home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume24 / mkid2 / part01 / bitcount.c < prev    next >
Text File  |  1991-10-09  |  643b  |  40 lines

  1. /* Copyright (c) 1986, Greg McGary */
  2. static char sccsid[] = "@(#)bitcount.c    1.1 86/10/09";
  3.  
  4. int bitCount();
  5. int bitsCount();
  6.  
  7. /*
  8.     Count the number of 1 bits in the given integer.
  9. */
  10. static char bitcnt[] = {
  11. /*    0 1 2 3 4 5 6 7    8 9 a b c d e f    */
  12.     0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4
  13. };
  14. int
  15. bitCount(mask)
  16.     register unsigned    mask;
  17. {
  18.     register int    nybbles = 8;
  19.     register int    cnt = 0;
  20.  
  21.     while (mask && nybbles--) {
  22.         cnt += bitcnt[mask&0xf];
  23.         mask >>= 4;
  24.     }
  25.     return cnt;
  26. }
  27.  
  28. int
  29. bitsCount(bitv, n)
  30.     register char    *bitv;
  31.     register int    n;
  32. {
  33.     register int    count = 0;
  34.  
  35.     while (n--) {
  36.         count += bitcnt[*bitv&0xf] + bitcnt[(*bitv>>4)&0xf];
  37.         bitv++;
  38.     }
  39. }
  40.