int count2(int a)//加一个unsigned变为无符号数,
{
int count1 = 0;
while (a)
{
a = a & (a - 1);// 可以把2进制最右边的1消除///超级算法
count1++; //比如a=1011和a-1=1010 为1010
}
return count1;
}
int get_diff_bit(int a, int b)
{
int tmp = ab;//158=15是怎么回事,b传过去为0--%d%d,输了1个
count2(tmp);
}
void print(int *p, int sz)//打印一个数组
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", *(p + i));//注意不是(*p+i)
}
}
//逆置数组,
//while (l > r)
//int tmp = arr[l];
//arr[l] = arr[r];
//arr[r] = tmp;
//l++;
//r__;
//printf(%s)
////int i=0;
////for (i = 30; i > 0; i -= 2)//奇数位
////{ 2进制:位数和增大方向相反
//// printf("%d", (m >> i) & 1);//向右移动i位,
////}//00000000000000000000000001000001 从左边第一位开始移动
////int i=0;
////for (i = 31; i > 0; i -= 2)//偶数位
////{ 2进制:位数和增大方向相反
//// printf("%d", (m >> i) & 1);//向右移动i位,
////}
int my_strlen(char*str)//计算数组大小(计数器方法)
//int my_strlen(char str[])//作用相同
{
int count = 0;
while (*str != '0')
{
count++;
str++;
}
}
void reverse_string(char arr[])//灵活引用的数组,值得反复看
//把char arr[]写成char* arr更容易理解
//虽然传的是首元素的地址,但是事实上arr+i可以调用整个数组
{
char tmp = arr[0];//1
int len = my_strlen(arr);
arr[0] = arr[len - 1];//2
arr[len - 1] = '\0';//3
if (my_strlen(arr + 1) >= 2)//难点 b的地址是数组名+1,联系 my_strlen看
//传的是首元素地址,接收是整个数组//arr+1长度不断变小
reverse_string(arr + 1);//此时进去第一个元素是b
//首元素地址+1,就是向右移一位
arr[len - 1] = tmp;//4
}
int Digitsum(unsigned int num)
{
if (num > 9)
{
return Digitsum(num / 10) + num % 10;
}
else
{
return num;
}
}