七、统计二进制中1的个数
方法一:函数直接将补码与1相与,得到1则count++,右移一位。
#include<stdio.h>
int count_bit_one(int a)
{
int count = 0;
int i = 0;
for (i = 0; i < 32; i++)
{
if (((a >> i) & 1) == 1)
{
count++;
}
}
return count;
}
int main()
{
int a = 0;
scanf("%d",&a);
//写一个函数求a的二进制(补码)表示中有几个1
int count = count_bit_one(a);
//-1
//10000000000000000000000000000001原码
//11111111111111111111111111111110反码
//11111111111111111111111111111111补码
//13
//00000000000000000000000000001101
printf("count=%d\n", count);
return 0;
}
代码实现:
方法二:将原函数设置为无符号位:unsigned,函数将会不考虑负数的符号位
#include<stdio.h>
int count_bit_one(unsigned int a)
{
int count = 0;
while (a)
{
if (a % 2 == 1)
{
count++;
}
a = a / 2;
}
return count;
}
int main()
{
int a = 0;
scanf("%d", &a);
int count = count_bit_one(a);
printf("count=%d\n", count);
return 0;
}
代码实现:
方法三:将a&(a-1),每执行一次,count++,知道a=0;
#include<stdio.h>
int count_bit_one(a)
{
int count=0;
while (a)
{
a = a&(a - 1);
count++;
}
return count;
}
int main()
{
int a = 0;
scanf("%d", &a);
int count = count_bit_one(a);
printf("count=%d\n", count);
return 0;
}
八、引用上一题求二进制中的不同位的个数:
#include<stdio.h>
int count_bit_one(a)
{
int count=0;
while (a)
{
a = a&(a - 1);
count++;
}
return count;
}
int get_dif_bit(m, n)
{
int tem = m^n;
int count = count_bit_one(tem);
return count;
}
int main()
{
int m = 0;
int n = 0;
scanf("%d%d", &m, &n);
int count = get_dif_bit(m,n);
printf("count=%d\n", count);
return 0;
}
代码实现:
九、打印二进制的奇数位和偶数位
#include<stdio.h>
void print(int m)
{
int i = 0;
printf("奇数位为:");
for (i = 30; i >= 0; i -= 2)
{
printf("%d", (m >> i) & 1);
}
printf("\n");
printf("偶数位为:");
for (i = 31; i > 0; i -= 2)
{
printf("%d", (m >> i) & 1);
}
printf("\n");
}
int main()
{
int m = 0;
scanf("%d", &m);
print(m);
return 0;
}
代码实现:
十、使用指针打印数组内容
#include<stdio.h>
void print(int* p, int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", *(p + i));
}
}
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int sz = sizeof(arr) / sizeof(arr[0]);
print(arr, sz);
return 0;
}
代码实现:
十一、交换两个变量,不得使用第三个变量
#include<stdio.h>
int main()
{
int m = 3;
int n = 5;
printf("m=%d,n=%d\n", m, n);
m = m^n;
n = m^n;
m = m^n;
printf("m=%d,n=%d\n", m, n);
}
代码实现:
十二、实现一个函数,打印一个乘法口诀表,口诀表的行数和列数自己指定(如:输入9,输出9*9口诀表;输入12输出12*12口诀表)
#include<stdio.h>
void print_table(int n)
{
int i = 0;
for (i = 1; i <= n; i++)
{
int j = 0;
for (j = 1; j <= i; j++)
{
printf("%d*%d = %-2d ", j, i, j*i);
}
printf("\n");
}
}
int main()
{
int n = 0;
scanf("%d", &n);
print_table(n);
return 0;
}
代码实现: