位运算中A|B=C,已知A和C,如何求出B?

如题,比如有 60|X=61,求x的值
另外如果把位或符号"|"换成别的,怎么求呢?

60转换成二进制: 0011 1100
61转换成二进制: 0011 1101

要使得60按位或运算变成61,X对应60的二进制上为1的位是不是1都可,最后一位一定要是1.

img

所以X可能的值共有16种,分别为

img

仅供参考,望采纳~

#include <stdio.h>
int main(void)
{
    int i;
    /*   A|B=C  A、C已知,求B    */
    int A=60,B,C=61;
    for( i=0;i<8;i++)
    {
        if((A&(0x01<<i))==(C&(0x01<<i)))
        {
            B&=~(1<<i);
        }
        else
        {
            B|=(1<<i);
        }
    }
    printf("B=%d\n",B);
    printf("A|B=%d\n",A|B);
    /*   a&c=c  a、c已知,求b    */
    int a=61,b,c=61;
    for( i=0;i<8;i++)
    {
        if((a&(0x01<<i))==(c&(0x01<<i))&&(a&(0x01<<i))==(0x01<<i))
        {           
            b|=(1<<i);
        }
        else
        {
            b&=~(1<<i);
        }
    }
    printf("b=%d\n",b);
    printf("a&b=%d\n",a&b);
    return 0;
}

img