栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

BITCOUNT(x)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

BITCOUNT(x)

#define BIT(x) (1 << (x))
// BX_(X):以4bit为一个单位进行BIT_COUNT,在此基础上16进制.
//		以一个4bit的数据x = abcd为例,其中a~d为0或1
//		x = 8a + 4b + 2c + d
//		x>>1 = 4a + 2b + c
//		x>>2 = 2a + b
//		x>>3 = a
//		BX_(x) = x - (x>>1) - (x>>2) - (x>>3) = a + b + c + d 
#define BX_(x)       ((x) - (((x)>>1)&0x77777777) - (((x)>>2)&0x33333333) - (((x)>>3)&0x11111111))
// 	BITCOUNT(x) = sum( 0x000_000f & (BX_(x) >> (i*4)) ),其中sum()表示求和运算,i的取值为0~7。
//		如果x是一个16位的数,比如abcd,其中a~d代表一个4bit的数。
//		BX_(abcd) = efgh, BITCOUNT 应该等于 e+f+g+h             
//		则BITCOUNT(abcd) = ((efgh + 0efg ) & 0x0f0f) %0xff
//						 = 0j0k % 0xff ,其中j= e+f, k = g+h
//						 = j+k = e+f+g+h
//		如果x是一个32位的数,比如ijkl_mnop,则BX_(ijkl_mnop)=abcd_efgh,需要证明 BITCOUNT = sum(a,h)
//		BITCOUNT(x) = ((abcd_efgh + 0abc_defg) & 0x0f0f_0f0f) % 0xff
//					= 0q0r0s0t % 0xff, 其中 q=a+b,r=c+d, s=e+f, t=g+h
//					= q+r+s+t = sum(a,h)
//      功能:将所有位相加。比如1110 0011  =1+1+0+0+0+1+1+1=5
#define BITCOUNT(x)  (((BX_(x)+(BX_(x)>>4)) & 0x0F0F0F0F) % 255)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/269066.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号