题目讲解
求一个整数二进制表达式中1的个数
1.%2 /2法,传参类型为unsigned int 即可适用于负数
2.位操作符与移位操作符法
用1和n比较,然后右移n,移动32次,是一则统计
3.神之一手
二进制的递变性质每一次减一都有位的变化
1000000
01111111
n & (n-1)常用于统计二进制中有几个1,涉及二进制的多去考虑考虑
while(n)
{
n = n & (n - 1);
count++;
}
整形提升和算数转换
整形提升
char, unsigned char,short, unsigned short运算时会转换成Int类型再计算
int ,unsigned int, long, long long,float ,double则遵从算数转换规则
算术转换
不同类型计算时(无强制类型转换),会按照从低到高的方向执行算术转换(如:int转换成unsigned int时 不改变数字,改变cpu的读取方式,符号位变成算术位(如:负整数与无符号整数的运算)
全局变量和静态变量存在静态区,默认初始化为0.
scanf("%d%d", &a, &b) ==2
scanf的返回值是输入的值的个数