CSAPP一道移位运算题

发布于 2022-09-11 19:21:54 字数 712 浏览 25 评论 0

**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

clipboard.png

1(w-k)0(k) = 0(w) = 0,二者并不相等。在不使用w变量的条件下真的可以得到正确的结果吗?

补充题目要求:

clipboard.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

樱&纷飞 2022-09-18 19:21:54

分成两次移动,不过要多加一个判断。

if (k < 2) return -1 << k;

return (-1 << (k - 1)) << 1;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文