探索小小二进制

  • 实现一个数按二进制位模式从左到右翻转后的值
#include <stdio.h>
#include <math.h>
unsigned int Reserve_bits (unsigned int value )
{
  int i=0;
  unsigned int result =0;
  unsigned int sum =0;
    for (i=0; i<32; i++ )
    {
      result =value & 1;      //result =value%2;
      sum =sum + result * pow (2, 31-i );
      value =value>>1;      //value =value/2;
     }
   return sum;
 }
int main ( ) 
{
   unsigned   int ret =0;
     printf ("%u ",Reserve_bits (25));
   return 0;
 }
  • 不使用(a+b)/2, 来计算两个数的平均值。
#include <stdio.h>
int main ( )
{
  int a=0;
  int b=0;
    int aver=b+((a-b)>>1);
> 内存中,数据实际以二进制序列存放,(a+b)/2 实际上相当于二进制中(a+b)>>1。
    scanf ("%d%d",&a,&b);
  printf ("%d",aver);
 return 0;
  }
  • 寻找一组数据中,不是成对出现的一个数。
#include <stdio.h>
int Difer_num (int arr[ ],int sz)
{
  int i=0;
  int ret=0;
    for (i=0;i<sz;i++)
   {
     ret=ret ^ arr[i];
   }
  return ret;
}
int main ( )
{
  int arr[ ]= {1,2,3,5,3,2,1};
  int sz = sizeof (arr)/sizeof (arr[0]);
    printf ("%d ",Difer_num(arr,sz));
  return 0;
}

猜你喜欢

转载自blog.csdn.net/Darling_sheeps/article/details/83624669
今日推荐