⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bitcnt_3.c

📁 嵌入式基准程序集Mibench,如果需要全部测试软件,请从密西根大学网站上下载: http://www.eecs.umich.edu/mibench/
💻 C
字号:
/* +++Date last modified: 05-Jul-1997 *//***  BITCNT_3.C - Bit counting functions using table lookup****  public domain by Auke Reitsma and Bruce Wedding*/#include "bitops.h"   /* from Snippets *//***  Bits table*/static char bits[256] ={      0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4,  /* 0   - 15  */      1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,  /* 16  - 31  */      1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,  /* 32  - 47  */      2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,  /* 48  - 63  */      1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,  /* 64  - 79  */      2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,  /* 80  - 95  */      2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,  /* 96  - 111 */      3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,  /* 112 - 127 */      1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,  /* 128 - 143 */      2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,  /* 144 - 159 */      2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,  /* 160 - 175 */      3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,  /* 176 - 191 */      2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,  /* 192 - 207 */      3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,  /* 208 - 223 */      3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,  /* 224 - 239 */      4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8   /* 240 - 255 */};/***  Count bits in each nybble****  Note: Only the first 16 table entries are used, the rest could be**        omitted.*/int CDECL ntbl_bitcount(long int x){      return            bits[ (int) (x & 0x0000000FUL)       ] +            bits[ (int)((x & 0x000000F0UL) >> 4) ] +            bits[ (int)((x & 0x00000F00UL) >> 8) ] +            bits[ (int)((x & 0x0000F000UL) >> 12)] +            bits[ (int)((x & 0x000F0000UL) >> 16)] +            bits[ (int)((x & 0x00F00000UL) >> 20)] +            bits[ (int)((x & 0x0F000000UL) >> 24)] +            bits[ (int)((x & 0xF0000000UL) >> 28)];}/***  Count bits in each byte****  by Bruce Wedding, works best on Watcom & Borland*/int CDECL BW_btbl_bitcount(long int x){      union       {             unsigned char ch[4];             long y;       } U;        U.y = x;        return bits[ U.ch[0] ] + bits[ U.ch[1] ] +              bits[ U.ch[3] ] + bits[ U.ch[2] ]; }/***  Count bits in each byte****  by Auke Reitsma, works best on Microsoft, Symantec, and others*/int CDECL AR_btbl_bitcount(long int x){      unsigned char * Ptr = (unsigned char *) &x ;      int Accu ;      Accu  = bits[ *Ptr++ ];      Accu += bits[ *Ptr++ ];      Accu += bits[ *Ptr++ ];      Accu += bits[ *Ptr ];      return Accu;}#ifdef TEST#include <stdlib.h>#include "snip_str.h"               /* For plural_text() macro    */main(int argc, char *argv[]){      long n;      while(--argc)      {            int i;            n = atol(*++argv);            i = BW_btbl_bitcount(n);            printf("%ld contains %d bit%s set\n",                  n, i, plural_text(i));            i = AR_btbl_bitcount(n);            printf("%ld contains %d bit%s set\n",                  n, i, plural_text(i));      }      return 0;}#endif /* TEST */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -