1.写一个函数返回参数二进制中 1 的个数;
2.获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列;
2.获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列;
3. 输出一个整数的每一位;
4.编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?(剖析:即为统计两个数异或(相同为0,不同为1)后1的个数。
#include<stdio.h> #include<windows.h> int count_one_bits(unsigned int value) { int count = 0; //方法1 //while(value){ // if(1 == value%2)//始终判断最低位1 * 2 ^ 0 = 1 // { // count++; // } // value /= 2;//从低位判断依次向高位移动 //} //方法2 //while(value){ // if(value&1)//右移将原始高位都移到最低位,与1相与判断最低位 // { // count++; // } // value >>= 1; //} //方法3(学习版) while(value){ count++; value &= value-1;//与本身-1相与,可以每次消去较低位的1 }//3:0011 & 2:0010 = 2:0010 & 1:0001 = 0:0000 结果为2 return count; } void bin_even_odd(int value ,int arr[32]){ int i = 0; for(; i < 31; i+=2){ arr[i] = value>>i&1; } for(i = 1; i < 32; i+=2){ arr[i] = value>>i&1; } } void bin_every(int value){ int i = 31; for(; i >= 0; i--){ printf("%d",value>>i&1); } printf("\n"); } //4.方法1 int compare_bin_difference(int m, int n){ int i = 0; int count = 0; /*int high_bit = 0; int max=m > n? m: n; for(i = 31; i >= 0; i--){ if(max>>i&1){ high_bit = i; break; } }*/ for(i = 0; i <= 32; i++){//high_bit if((m>>i&1) != (n>>i&1)){ count++; } } return count; } int main() { /*int arr[32] = {0}; int i,j;*/ int m = 0; int n = 0; /*int value; scanf("%d",&value);*/ scanf("%d%d",&m,&n); //printf("%d\n",count_one_bits(value)); /*bin_even_odd(value ,arr); printf("偶数位为:\n"); for(i = 0; i < 31; i+=2){ printf("%d ",arr[i]); } printf("\n奇数位为:\n"); for(i = 1; i < 32; i+=2){ printf("%d ",arr[i]); } printf("\n");*/ //bin_every(value); //printf("%d\n",compare_bin_difference(m, n)); //4.方法2:可以理解为求解两个数异或后位为1的个数,即为不同的位数 printf("%d\n", count_one_bits(m ^ n)); system("pause"); return 0; }