**2.81 编写C表达式产生如下位模式,其中a(k)表示符号a重复k次。假设一个w位的数据类型。
代码可以包含对参数j和k的引用,它们分别表示j和k的值,**但是不能使用表示w的参数**。
A. 1(w-k)0(k)
B. 0(w-k-j)1(k)0(j)
这是CSAPP上面的一道课后习题,这里只考虑A题支,我看了很多答案,他们是这样写的:
int A(int k)
{
return -1 << k;
}
//or
int A(int k)
{
return ~((1<<k) - 1);
}
这些解答在0 <= k < w
的时候是正确的,但是当k = w
时,参考下面移位运算的说明,有A(w) = -1
。
而1(w-k)0(k) = 0(w) = 0
,二者并不相等。在不使用w变量的条件下真的可以得到正确的结果吗?
补充题目要求:
分成两次移动,不过要多加一个判断。