练习题目6

1.写一个函数返回参数二进制中 1 的个数
比如:15 : 00001111 4 个 1
思路:先将此数和1进行按位与运算,若结果非0,计数器加一。然后每次让1左移,然后和此数相与,结果非0,计数器加加。
代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int count_one_bits(unsigned int value){
 int count = 0;
 int i = 0;
 for (i = 0; i < 32; ++i){
  if (value &(1 << i)){
   ++count;
  }
 }
 return count;
}
int main(){
 int num;
 scanf("%d", &num);
 int count=count_one_bits(num);
 printf("%d\n", count);
 system("pause");
 return 0;
}

在这里插入图片描述
2.获取一个数二进制序列中所有的偶数位和奇数位,
分别输出二进制序列。
思路:求奇数位序列:先将此数右移30位,和1相与,得到最高奇数位。然后每次将此数右移2位,计算和1相与的结果,直至算到最低奇数位。
求偶数序列:先将此数右移31位,和1相与,得到最高偶数位。然后每次将此数右移2位,计算和1相与的结果,直至算到最低偶数位。
代码如下:

分别输出二进制序列。
#define _crt_secure_no_warnings
#include<stdio.h>
#include<stdlib.h>
//求奇数位序列
void odd(int num){
 int i = 30;
 printf("奇数位: ");
 for (i=30; i >= 0;i-=2){
  printf("%d", ((num >> i) & 1));
 }
 printf("\n");
}
//求偶数位序列
void even(int num){
 int i = 31;
 printf("偶数位:");
 for (i=31; i >= 1; i -= 2){
  printf("%d", ((num >> i) & 1));
 }
 printf("\n");
}
int main(){
 int num;
 scanf("%d", &num);
 odd(num);
 even(num);
 system("pause");
 return 0;
}

在这里插入图片描述
3.输出一个整数的每一位。
思路:利用递归将一个整数正序依次输出每一位。
代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void print(int num){
 if (num < 10){
  printf("%d ", num);
 }
 else{
  print(num / 10);
  printf("%d ", num % 10);
 }
 printf("\n");
}
int main(){
 int num;
 scanf("%d", &num);
 print(num);
 system("pause");
 return 0;
}

在这里插入图片描述
4.编程实现两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子:
1999 2299
输出例子 : 7
思路:先将两个整数分别和1进行按位与运算,然后求异或。若结果非0,计数器加一。接下来每次让1左移一位,分别和两数按位与后求异或,若结果非0,计数器加加。直至算完32位。
异或:不同为1,相同为0。
代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
//m,n为两个被比较的整数,count为不同bit的个数
int Difference(int m,int n){
 int count = 0;
 int i = 31;
 int x = 1;
 for (; i >= 0;--i,x<<=1){
  if (((m&x)^(n&x))){
   ++count;
  }
 }
 return count;
}
int main(){
 int m = 0;
 int n = 0;
 scanf("%d %d", &m, &n);
 int count = Difference(m,n);
 printf("%d\n", count);
 system("pause");
 return 0;
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44779696/article/details/88899294