#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;
}