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

C:位运算(2)

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
/*the max length of unsigned int*/ int int_size () { unsigned int bits; int size = 0; bits = ~0; while ( bits ) { ++size; bits >>= 1; } return size; } 4.2移位运算 /*a bit mover for unsigned int if

/*the max length of unsigned int*/

int int_size ()

{

  unsigned int bits;

  int size = 0;

  bits = ~0;

  while ( bits ) {

    ++size;

    bits >>= 1;

  }

  return size;

}

  4.2移位运算

/*a bit mover for unsigned int

 if n > 0 move left for n bits,else move right*/

unsigned int bit_shift (unsigned int value,int n)

{

  int intsize=int_size();   /*the length of unsigned int*/

  if(n>0 && n< intsize)    /*move left*/

   value<<=n;

  else if (n<0 && n> -intsize) /*move right*/

   value>>=-n;

  else

   value=0;

  return value;

}

  4.3循环移位运算

/*a bit rotate mover for unsigned int

 if n > 0 move left for n bits,else move right*/

unsigned int bit_rotate (unsigned int value, int n)

{

  unsigned int result,bits,intsize;

  intsize=int_size(); /*the length of unsigned int*/

  if(n > 0)

   n=n % intsize;

  else

   n=-(-n % intsize);

  if(n==0)

   result=value;

  else if(n >0 ){        /*move left*/

    bits=value >> (intsize-n);/*bits should be in the rightest*/

    result=value << n|bits;

  }else{           /*move right*/

    n=-n;

    bits=value << (intsize-n);/*bits should be in the leftest*/

    result=value >> n|bits;

  }

  return result;

}

精彩图集

赞助商链接