bis 和bic都是可以看作系统已经提供好的函数,所以可以用and or not 组合设计
bis(x,m)--置数--作用:
在x这个二进制串中把m中为1的位置全部变成0,m中为0的 不变,可以看到bis(x,m)结果和x or m 一样
例如 ,下面的例子中m前几位都是1,所以bis(x,m)中 前几位被修改为1,后几位不变
x=1010111001
m=1111100000
bis(x,m)=
1111111001
bic(x,m)--置数--作用:
在x这个二进制串中把m中为1的位置全部变成0,类似上面,想不出来可以用真值表
0,0=0
0,1=0
1,0=1
1,1=0
bic(x,m)=x and (not m)
所以or就是bis
写xor的时候,
我们可以(bic) bis(bic)
也可以(bis) bic (bis)
以 (bic 1) bis(bic2)为例子
当x,y=1 0 或者x,y =0 1的时候,bic1,bic2的任何一个只要为1 就可以了
而bic 当 x,y=1 0 的时候为1 所以 而x,y= 1 0 或者x y = 0 1所以 bic(x,y) ,bic(y,x)必有一个为1,也就是bic1 = bis(x,y) bic2 = bic(y,x)
所以xor = bis(bic(x,y),bic(y,x))
#include
#include
#include
int bis(int x,int m){
return x|m;
}
int bic(int x,int m){
return x & ~ m;
}
int bool_or_using_bis_bic(int x,int y){
return bis(x,y);
}
int bool_xor_using_bis_bic(int x,int y){
return bis(bic(x, y), bic(y, x));
}
int main(){
//随机化
srand(time(NULL));
for (int i=0;i<10;i++){
printf("-----------开始第 %d 组测试--------\n",i+1);
//生成两个小于100的随机数
int x=rand()%101;
int y=rand()%101;
printf("x=%d y=%d \nXOR right=%d my=%d %s \nOR right=%d my=%d %s\n",
x,y,
x^y,bool_xor_using_bis_bic(x,y),
x^y-bool_xor_using_bis_bic(x,y)==0?"TRUE":"FALSE",
x|y,bool_or_using_bis_bic(x,y),
x|y-bool_or_using_bis_bic(x,y)==0?"TRUE":"FALSE"
);
}
printf("\n\n测试完毕");
}