操作符练习

统计一个数字的二进制中1的个数

例如:15的二进制是0000 1111,有4个1
方法1:

1234567891011121314151617181920212223242526272829303132333435
#include <stdio.h>int main() {    int x = 0;    int a = 0;    int y = 0;    printf("计算一个数字的二进制中1的个数\n");    printf("请输入一个数字:->");    scanf("%d",&x);    y = x;    if (x>=0)     {        while(x)        {            if ( x % 2 == 1 )             {                a++;            }            x = x / 2;        }    }else    {        x = -(x);        while(x)        {            if ( x % 2 == 1 ) {                a++;            }            x = x / 2;        }        a = 32 - a;        a = a + 1;    }    printf("%d的二进制中有%d个1\n",y,a);    return 0;}

方法2:

1234567891011121314151617181920
#include <stdio.h>int main() {    int x = 0;    int a = 0;    int y = 0;    int i = 0;    printf("计算一个数字的二进制中1的个数\n");    printf("请输入一个数字:->");    scanf("%d",&x);    y = x;    for (i=0; i<32; i++)     {       if (((x >> i) & 1) == 1) //这一步得到这个数字的二进制中的1位数字是1还是0       {            a++;       }    }    printf("%d的二进制中有%d个1\n",y,a);    return 0;}

方法3:

1234567891011121314151617
#include <stdio.h>int main() {    int x = 0;    int a = 0;    int y = 0;    int i = 0;    printf("计算一个数字的二进制中1的个数\n");    printf("请输入一个数字:->");    scanf("%d",&x);    y = x;    while (x) {        x = x & (x-1);        a++;    }    printf("%d的二进制中有%d个1\n",y,a);    return 0;}

相关:负数的二进制计算


统计两个数字的二进制中不同位数的个数

方法1:

12345678910111213141516
#include <stdio.h>int main() {    int a;    int b = 0;    int x,y;    printf("计算两个数字的二进制中不同位的个数\n");    printf("请输入两个数字:->");    scanf("%d%d",&x,&y);    for (a = 0; a<32; a++) {        if (((x>>a) & 1) != ((y>>a) & 1)) {            b++;        }    }    printf("有%d个不同的位数\n",b);    return 0;}

方法2:利用按位异或^的特性统计二进制中1的个数。
相关:按位异或

1234567891011121314151617181920
#include <stdio.h>int main() {    int c;    int b = 0;    int x,y;    printf("计算两个数字的二进制中不同位的个数\n");    printf("请输入两个数字:->");    scanf("%d%d",&x,&y);    c = x ^ y;    while(c)            {                if ( c % 2 == 1 )                    {                        b++;                    }                c = c / 2;            }    printf("有%d个不同的位数\n",b);    return 0;}

打印二进制的奇数位和偶数位

获取一个整数二进制的所有偶数位和奇数位,分别打印出二进制序列。

123456789101112131415161718192021
#include <stdio.h>int main() {    int a;    int x = 0;    printf("打印二进制的奇数位和偶数位\n");    printf("请输入数字:->");    scanf("%d",&x);    printf("奇数位:");    for (a = 30; a>=0; a -= 2)    {        printf("%d ",(x>>a)&1);    }    printf("\n");    printf("偶数位:");    for (a = 31; a>=0; a -= 2)    {        printf("%d ",(x>>a)&1);    }    printf("\n");    return 0;}

使用指针打印数组内容

123456789101112
#include <stdio.h>int main(){    int i;    int arr[10] = {1,2,3,4,5,6,7,8,9,10};    int sz = sizeof(arr)/sizeof(arr[0]) - 1;    int* p = arr;    for (i=0; i<=sz; i++) {        printf("%d ",*p+i);    }    return 0;}

相关:交换两个变量的值,不使用第三个变量

🔍 ×