统计一个数字的二进制中1的个数
例如:15的二进制是0000 1111,有4个1
方法1:
1234567891011121314151617181920212223242526272829303132333435 | 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 | 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 | 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 | 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 | 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 | 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 | 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;} |