C語言對數組中的每個元素進行逐bit的'0','1'判斷
我想編個程序對數組ch中的每個元素進行逐bit的'0','1'判斷,並對'0','1'進行統計.imagewidth為數組長度.
void choose(unsigned char *ch,int imagewidth)
{
int i,j,k=0x80,x;
int white,black;
for(i=0;i<imagewidth;i++)
{
for(j=7;j>=0;j--)
{
x=*(ch+i)&k<<j;
//在這裡編寫程序,判斷x為'0'還是為'1',並和前一bit做比較,看是否有變化,假定此時x為'1',如果無變化,則black++;有變化,輸出black,並white++;為'0'的情況同理.注:數組元素的每個元素的第1bit要和前一元素的最後一bit進行比較.
}
}
}
這裡我邏輯沒理清,不知道如何編,跪求哪位好心的大大幫幫忙~~~
最佳回答:
#include <stdio.h>
#include <string.h>
/*測試統計0 - 256間每個數的 "0","1" 位數 希望和你的想法符合*/
void choose(unsigned char *ch,int imagewidth)
{
int i,j,k=0x80,x;
unsigned char test;
int one,zero;
for(i=0;i<imagewidth;i++)
{ one=0;zero=0;
for(j=0;j<8;j++)
{
test = (ch[i]<<j)&k;
if(test==0) {zero++;printf("0");}
else {one++;printf("1");}
}
printf(" 0:%-2d1:%-2d ",zero,one);
}
}
int main()
{
unsigned char test[256];
int i;
for(i=0;i<256;i++)
test[i]=i;
choose(test,256);
return 0;
}
/*剛才沒有看到注釋裡的要求,設個變量保存test就好了,就可以判斷是否和上次一樣,代碼就不寫了*/