64个十六进制字符,如何实现算出一个8位的十六进制中的1的个数?

如何实现算出一个8位的十六进制中的1的个数? - 故障解答 - 电脑教程网

如何实现算出一个8位的十六进制中的1的个数?

日期:2006-10-07   荐:
如何实现算出一个8位的十六进制中的1的个数?现在情况是这样的,有一个8位的十六进制数:例如0x2F(0010 1111)要算出,其中1的个数,以便进行奇偶校验,但是,数据很多,我也想到用0x2F和0x01进行相与,结果放在一个变量里面,然后把0x2F右移1位,再和0x01进行相与,这样,把最后的结果相加。但是,一个或几个这样的数据,可以这样,如果多了,几十个,几百个,怎么处理阿?用一个查找表,例如包含256个项,每个项都是对应index的包含的1的数目,但是,资源没有那么多阿用单片机的,没有那么多资源阿!十来天前有人问过这个问题,有一种用位运算来解决这个问题的方法效率还是很高的,你可以去搜索一下呵呵 32(256/8)个项就可以了,写入rom,用相对寻址取到位置就行了如果还嫌大那就分成两部分16/8 两个字节就行了可以不用移位.const char ch[]={ 1,2,4,8,16,32,64,128 };char getNum( char dat ){char sum = 0;for ( char i = 0; i < 8; i ){if ( dat & ch[i] ) sum;}return sum;}//返回字节数据中1的个数.单片机是RAM资源非常紧张,flash还是比较大的,一般都有32k,64k的.
标签: