用C位设置 [英] Setting Bits in C
本文介绍了用C位设置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我试图做到以下几点:
写FUNC
setbits(X,PN,Y)
返回X
与ñ
即开始在位
位置P
设置为最右侧的N
是
位,而使其它位
不变?
块引用>我试过这样,但没有得到正确的答案。谁能告诉我在哪里错了?
符号setbits(无符号X,INT P,诠释N,无符号Y)
{
则返回(x>指p及(Y |(〜0℃;&下; N)));
}
解决方案是这样的:
符号setbits(无符号X,INT P,诠释N,无符号Y)
{
无符号的面具=(1U<< N) - 1U; // n位
Y'放大器; =口罩;成Y //最右边的n位
Y'LT;< = P; //它开始于位置p
面膜<< = P; //同上
X'放大器; =〜口罩; //设置0
X | = Y; //设置1秒
返回X;
}或者,如果你想这样做更少的线,更难以调试,但waaaay冷却器:
符号setbits(无符号X,INT P,诠释N,无符号Y)
{
无符号的面具=(1U<< N) - 1U; // n位
返回(X安培;〜(面膜<< P))| ((Y&放大器;掩模)所述;&下,P);
}I'm trying to do the following:
Write a func
setbits(x,p.n,y)
that returnsx
withn
bits that begin at positionp
set to the rightmostn
bits ofy
,leaving the other bits unchanged?I tried it like this but not getting correct answers. Can anyone tell where I am wrong?
unsigned setbits(unsigned x,int p,int n,unsigned y) { return (x>>p & (y|(~0<<n))); }
解决方案Something like:
unsigned setbits(unsigned x,int p,int n,unsigned y) { unsigned mask = (1U << n) - 1U; // n-bits y &= mask; // rightmost n bits of y y <<= p; // which begin at position p mask <<= p; //idem x &= ~mask; //set the 0s x |= y; //set the 1s return x; }
Or if you want to do it in fewer lines, more difficult to debug, but waaaay cooler:
unsigned setbits(unsigned x,int p,int n,unsigned y) { unsigned mask = (1U << n) - 1U; // n-bits return (x & ~(mask << p)) | ((y & mask) << p); }
这篇关于用C位设置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文