CSAPP一道移位运算题
**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变量的条件下真的可以得到正确的结果吗?
补充题目要求:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
分成两次移动,不过要多加一个判断。