位运算问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_29173167/article/details/79391301
//查看两个字节的不同位
int diff(unsigned char a[4][4], unsigned char b[4][4])
{
    int i, j, k;
    int count = 0;
    unsigned char comp = 0x1<<7;
    for(i = 0; i < 4; i++)
        for(j = 0; j < 4; j++)
    {
        unsigned char c;
        c = a[i][j] ^ b[i][j];
        comp = 0x1<<7;
        for(k = 0; k < sizeof(a[i][j])*8; k++)
        {
            if((c & comp) != 0)
            {
                count ++;
            }
            comp = comp >> 1;
        }
    }
    return count;
}

//给二维数组的某一位置位
void SetBit(unsigned char a[4][4], int which_bit, unsigned char set_bit)
{
    int which_byte = (which_bit-1)/8;
    unsigned char *p = (unsigned char *)a;

    int i=0;
    while(i++ <which_byte && p++);

    *p &= ~(1<<(8-which_bit%8));
    *p |= set_bit<<(8-which_bit%8);

}

猜你喜欢

转载自blog.csdn.net/sinat_29173167/article/details/79391301