龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

C:位运算(3)

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
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 u

  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

精彩图集

赞助商链接