function BitMask_32Bits(var LongValue)
{
/*
输出输入参数(4字节值)中对应二进值不为0的bit位位数(最低位计为1)
例如:输入参数为3,则其对应的二进制值为00000000000000000000000000000011(32位)
则函数的输出值依次为1,2,且交替进行输出,直到对应为的值不再为1,则不再输出该bit位的位数
特例:如果输入值为0,则输出值为0
*/
int firstFrameCount=1;//标记前N祯
int lastBitPosition=0;//标记前一次输出的位数值
int tempI=0;
unsigned long templng;
unsigned long lngVal;
int flgReset=0;
//!
unsigned long bitMask=4294967295;
lngVal = LongValue & bitMask;
if (0<firstFrameCount)
{
lastBitPosition=-1;
firstFrameCount--;
return ;
}
if (0==lngVal)
{
lastBitPosition=-1;
if (flgReset == 0)
{
flgReset=1;
return 0;
}
else
{
return ;
}
}
if ((LongValue & bitMask)!=(LongValue & bitMask))
{
lastBitPosition=-1;
}
if (0>lastBitPosition)
{
templng=lngVal;
}
else
{
templng=(lngVal<<(32-lastBitPosition)) + (lngVal>>lastBitPosition);
}
for(tempI=31;tempI>=0;--tempI)
{
if(templng & (1<<tempI))
{
if (0>lastBitPosition)
{
lastBitPosition=tempI;
break;
}
else
{
lastBitPosition=(lastBitPosition+tempI)%32;
break;
}
}
}
flgReset=0;
return lastBitPosition+1;
}
CASL依次输出一个32bit数的每个bit位的0/1值
最新推荐文章于 2024-05-22 15:55:44 发布