C:位运算(3)
4.4返回无符号整型数value中从右起第p位的值
/* get bit No.p(from right) of value to see if it is on */
int bit_get (unsigned int value, int n)
{
int intsize=int_size(); /*the length of unsigned int*/
if ( p < 0 || p > intsize-1 )/*out of range*/
return 0;
if ( (value >> p) & 1 )
return 1;
else
return 0;
}
4.5将无符号整型数value中从右起的第p位置1
/* set bit No.p(from right) of value on */
unsigned int bit_set (unsigned int value, int p)
{
int intsize=int_size(); /*the length of unsigned int*/
if ( p < 0 || p > intsize-1 )/*out of range*/
return 0;
return value | (1 << p);
}
4.6返回无符号整型数value中从第p位(右起)向右n位的值
[1]~(~0 << n)表示最右边n位全为1;
[2]value >> (p+1-n)表示将目标位字段移至最右端;
/*get n bits of value at position p(from right) */
unsigned bits_get (unsigned int value, int p, int n)
{
int intsize=int_size(); /*the length of unsigned int*/
if ( n < 0 || p < 0 || p + n > intsize )
return 0;
return(value >> (p+1-n)) & ~(~0 << n);
}
4.7将无符号整型数value中从第p位(右起)向右n位设置为y最右边n位的值
[1]~(~0 << n)表示最右边n位全为1;
[2](~(~0 << n) << (p+1-n)表示将这n个1位左移至位置p;
[3]~(~(~0 << n) << (p+1-n))表示将从位置p开始的n位设置零,其余位设置一;
[4]unsigned tar=bits_get(y,n-1,n);取出y的低n位;
/*set n bits of value at position p(from right) with bits of y*/
unsigned bits_set (unsigned value, int p, int n, unsigned int y)
{
int intsize=int_size(); /*the length of unsigned int*/
if ( n < 0 || p < 0 || p + n > intsize )
return 0;
unsigned tar=bits_get(y,n-1,n);
return (value & ~(~(~0 << n) << (p+1-n))) | tar;
}
本文出自 “子 孑” 博客,请务必保留此出处http://zhangjunhd.blog.51cto.com/113473/52734





