我正在尝试执行以下操作:
写一个func
setbits(x,p.n,y),返回x的n位从p设置到最右边n位的位置开始,y其他位保持不变?
我试过这样但没有得到正确的答案.任何人都可以告诉我哪里错了吗?
unsigned setbits(unsigned x,int p,int n,unsigned y)
{
return (x>>p & (y|(~0<<n)));
}
Run Code Online (Sandbox Code Playgroud)
Kernighan 和 Ritchie,第二版,练习 2-6。解决方案来自http://users.powernet.co.uk/eton/kandr2/krx206.html:
(x & ((~0 << (p + 1)) | (~(~0 << (p + 1 - n))))) | ((y & ~(~0 << n)) << (p + 1 - n))