这段代码的意义是什么?()

这段代码的意义是什么?(高手进)
//这是数据声明部分:
int m_iBitCount08[256];
#ifdef USE_16BITCOUNT
int m_iBitCount16[65536];
#endif


//这是数据操作部分
int i;
for(i=0; i<256; ++i)
{
m_iBitCount08[i] = 0;
for(int j=0; j<8; ++j)
m_iBitCount08[i] += (i>>j)&1;
}
#ifdef USE_16BITCOUNT
for(i=0; i<65536; ++i)
{
m_iBitCount16[i] = 0;
for(int j=0; j<16; ++j)
m_iBitCount16[i] += (i>>j)&1;
}
#endif

我主要不明白的这两个for循环的意义,
这段代码的主要是干什么的吧,来达到什么目的?
如果能详细分析其中一个for循环就好了,谢谢。


------解决方案--------------------
for(i=0; i<256; ++i)
{
m_iBitCount08[i] = 0;
for(int j=0; j<8; ++j)
m_iBitCount08[i] += (i>>j)&1;
}
你应该看不懂是m_iBitCount08[i] += (i>>j)&1;这句,这句意思是这样:
当i=0时,i要向右移8次,每次移向右移一位并与上0x01,也就是i每次向右移一位,就把i移动后的值和1进行与,也就是i的最低一位进行和1进行与.
i每次右移一位并和1与后就进行累加存放在m_iBitCount08[i]里.
至于最后的数据是什么格式,你完全可以把m_iBitCount08这个数组里的每个值显示出就知道是什么格式了