鱼C论坛

 找回密码
 立即注册
查看: 1284|回复: 8

一元运算符的问题

[复制链接]
发表于 2016-3-28 15:31:20 | 显示全部楼层 |阅读模式
10鱼币
unsigned setbits(unsigned x, int p, int n, unsigned y){
        return x & ~(~(~0 << n) << (p + 1 - n)) | (y & ~(~0 << n)) << (p + 1 - n);
}

这是C程序设计语言中联系题的答案,其中解释道:

~(~(~0 << n) << (p + 1 - n))

把屏蔽码最右边n个1左移到第p位
这是怎么实现的呢,为什么左移(p + 1 - n)就会左移到第p位呢?

最佳答案

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-28 15:31:21 | 显示全部楼层
~(~0 << n)相当于1左移n位,然后取反,相当于把x的第n位置0,其他位不变。
<< (p + 1 - n)你可以看做先右移n位,然后再左移p+1位。
以上就是相当于把x的第n位置零,然后再把这个位移到0位(最右边一位,注意,是从0位而不是1位开始计算),再到左移p+1位
最后,是最终的取反,也就是把这个位从0置为1,其他的位置为0,相当于把x的第n位的屏蔽码移动到第p+1位,其他位置0.
我觉得不是移到到第p位,而是第p+1位,因为c里位置是从0而不是从1开始的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-3-28 18:25:27 | 显示全部楼层
求解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-3-28 20:00:19 | 显示全部楼层
求解答啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-3-29 08:30:57 | 显示全部楼层
没人啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-29 08:54:36 | 显示全部楼层
没懂你的意思,逻辑的问题吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-31 09:25:22 | 显示全部楼层
求大神给方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-4-2 17:35:43 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-4-7 21:20:33 | 显示全部楼层
进来学习一下  发现太深奥  不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 22:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表