家庭作业(第二章3星一题,2星两题;第三章1星两题,共9分)
一、第二章
***2.66.写出代码实现如下函数int leftmost_one(unsigned x),函数遵循位级整数编码规则,假设数据类型int有32位。代码最多只能包含15个算术运算、位运算和逻辑运算
int leftmost_one(unsigned x)
{
if(x==0)
{
return x;
}
if(x>(1<<31))
{
return 0x80000000;
}
x|=(x>>1);
x|=(x>>1);
x|=(x>>1);
x|=(x>>1);
x|=(x>>1);
x+=1;
x=x>>1;
return x;
}
**2.76.生成一段代码,将整数变量x乘以不同的常数因子K,为提高效率,只使用+、-、<<运算,对于下列K值写出执行乘法运算的C表达式,每个表达式中最多用3个运算
A.K=5: (x<<2)+x
B.K=9: (x<<3)+x
C.K=30: (x<<5)-(x<<1)
D.K=-56: (x<<3)-(x<<6)
**2.82.一些数字的二进制表示是由形如0.yyyyy……的无穷串组成,y是一个k位的序列。例如1/3的二进制表示是0.010101……(y=01)
A.设Y=B2Uk(y),这个数有二进制表示y。给出一个由Y和k组成的公式表示这个无穷串的值 x=Y/(2^k-1)
B.对于下列y值,串的数值是多少?
(a)001 x=1/7
(b)1001 x=3/5
(c)000111 x=1/9
二、第三章
*3.54.一个函数的原型为int decode2(int x, int y, int z);
int decode2(int x, int y, int z)
{
int k;
z -= y;
k = z;
k<<= 15;
k>>= 15;
return k*(z^x);
}
*3.69.
long trace(tree_ptr tp)
{
long ret = 0;
while(tp != NULL)
{
ret = tp->val;
tp = tp->left;
}
return ret;
}
作用是从根一直遍历左子树,找到第一个没有左子树的节点的值。