习题1
求2进制1的位数
3种方法
- %2得末尾位数
- 移位;通过和1&得到末尾情况;
- 除n-1;每运算一次消掉一个1;
//int count_num_of_1(unsigned int n)
//{
// int count = 0;
// while (n)
// {
// if ((n % 2) == 1)
// {
// count++;
// }
// n /= 2;
// }
// return count;
//}
//-1
//10000000000000000000000000000001
//11111111111111111111111111111110
//11111111111111111111111111111111
//
//int count_num_of_1(int n)
//{
// int i = 0;
// int count = 0;
// for (i = 0; i < 32; i++)
// {
// if (((n >> i) & 1) == 1)
// {
// count++;
// }
// }
// return count;
//}
//n = 15
//n = n&(n-1)
//1111 n
//1110 n-1
//1110 n
//1101 n-1
//1100 n
//1011 n-1
//1000 n
//0111 n-1
//0000 n
//int count_num_of_1(int n)
//{
// int count = 0;
// while (n)
// {
// n = n & (n - 1);
// count++;
// }
// return count;
//}
//
//如果要判断一个数是不是2的n次方
//
//2^1
//10
//2^2
//100
//2^3
//1000
//
//if ((n & (n - 1)) == 0)
//{
//
//}
//
//int main()
//{
// int num = 0;
// scanf("%d", &num);
//
// int n = count_num_of_1(num);
// printf("%d\n", n);
//
// return 0;
//}
- sizeof返回的是一个无符号数;比较时要注意;
- 数组在内存中是倒着存的
- scanf遇到“ ”会停止 用gets;
- 横线上不能放B因为 . 比*优先级高;