深入理解计算机系统第三版第二章答案

 

练习题2.13

 

分析

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测试完毕");
}

深入理解计算机系统第三版第二章答案_第1张图片

你可能感兴趣的:(深入理解计算机系统第三版第二章答案)