#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>

//int count2(unsigned int a)//加一个unsigned变为无符号数,
//{
// int count1 = 0;
// while (a)
// {
// if (a%2 == 1);
// {
// count1++;
// }
// a = a/2;
// }
// return count1;
//}
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 main()
{
//int arr1[] = { 1,3,5,7,9 };
//int arr2[] = { 2,4,6,8,10 };
////int tmp[5] = { 0 };
//int tmp = 0;
//int i = 0;
//for (i = 0;i < 5; i++)
//{
// tmp = arr1[i];
// arr1[i] = arr2[i];
// arr2[i] = tmp;
//}

//int arr[] = { 1,2,3,4,5 };//一个字符4个字节
//short*p = (short*)arr;//short 一个字符是两个字节 首元素地址
//int i = 0;
//for (i = 0; i < 4; i++)
//{
// *(p + i) = 0;//一次修改1/2个字节
//}
//for (i = 0; i < 5; i++)
//{
// printf("%d", arr[i]);
//}//输出00345

//int a = 0x11223344;//地址是倒着放进去的,拿也是倒着拿出来的,修改的时候注意
//char *pc = (char*)&a;//把a变成地址
//*pc = 0;
//printf("%x\n", a);

//int i//如果i为全局变量,不初始化默认为0;在主函数外面是0吗?
//if(i>sizeof(i))//sizeof计算变量所占内存大小>=0;返回一个无符号数
//-1的二进制序列
// 10000000000000000000000000000001原码
//11111111111111111111111111111110反码
//11111111111111111111111111111111补码//当变成正数的时候,第一位不代表符号位了
//此时i > sizeof(i) i为2的16次方

//int a, b, c;
//a = 5;
//c = ++a;
//b = ++c, c++, ++a, a++;//b= ++c, =的优先级比,高
// b += a++ + c;//+的优先级比+=高;
// printf("a=%d b=%d c=%d\n:", a, b, c);

//&--按位与 &&--逻辑与 ||--按位或

//int a = 63;
//int i = 0;
//int end = 0;
//for (i = 0; i <32; i++)
//{
// if ((a >> i)&1 == 1)
// {
// end++;
// }
//}
//printf("%d\n", end);

//int a = 0;
//scanf("%d", &a);
//int count = count2(a);
//printf("%d\n", count);

//int m = 0;
//int n = 0;
//scanf("%d%d", &m, &n);
//int count=get_diff_bit(m, n);
//printf("%d\n", count);

//int a = 2;
//int b = 1;
//int c = a ^ b;
//printf("%d ", c);

//system("pause");//系统为控制台时,不需要写这句
//使程序终止
//-1的补码是32个1
//-1/2商为0
//正数的原反补码相同

//计算i&1 结果是原2进制为1,结果为1,原2进制为0,结果为0;


//int arr[] = { 1,2,3,4,5,6,7,8,9 };//打印一个数组
//int sz = sizeof(arr) / sizeof(arr[0]);
//print(arr, sz);



return 0;

}