同理,对于得到整数的每一个二进制位,我们可以通过%2,/2的方式,得到该整数的每一个二进制位 代码如下 intNumberOf1(intn){intcount=0;while(n){if(n%2==1){count++;}n/=2;}returncount;} 测试 #include <stdio.h>intNumberOf1(intn){intcount=0;while(n){if(n%2==1){count++;}n/=2;}re...
// 统计一个数二进制中的1的个数#include<stdio.h>intcount(inta){intcount=0;while(a){count++;a=a&(a-1);}returncount;}intmain(){printf("%d\n",count(10));printf("%d\n",count(0));printf("%d\n",count(-1));return0;} 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13...
我们随便书写一个二进制序列:1101,1101&1100,得到1100,我们发现原二进制中最右边的1消失了;再将1100&1011,得到1000,发现二进制序列中1100最右边的1也消失了。由此我们可以看到,当进行运算“n=n&(n-1)”时,会使得n的二进制序列的最右边的1消失,我们可以利用这种特性来计算二级制序列中1的个数。代码如下。 int...
return count; } int main() { printf("%d\n", count(10)); printf("%d\n", count(0)); printf("%d\n", count(-1)); return 0; }
void Convert(int n){ int i=0,count=0,j,t;int a[20]={0};while(n!=1&&n!=0)//转换二进制 { a[i]=n%2;n=n/2;i++;} if(n!=0)a[i]=1;t=i;while(i!=-1)//输出二进制 { printf("%d",a[i]);i--;} for(j=0;j<=t;j++)//统计1的个数 { if(a[j]==...
位运算--统计一个数的二进制表示中1的个数 位运算--统计⼀个数的⼆进制表⽰中1的个数 位运算--统计⼀个数的⼆进制表⽰中1的个数 第⼀种⽅法,将1向左移0-31位,与原数进⾏与运算,结果再向右移对应的位数,累加起来就可以了。#include int main(){ int n,i,k=1,re;scanf("...
简介:C语言训练:三个字符串比较大小,实现两个整数数的交换统计二进制中1的个数 一、编写程序,输入三个字符串,比较它们的大小,并将它们按由小到大的顺序输出。要求用函数、指针实现。要求:要采用函数调用,并用指向函数的指针作为函数的参数。 1.不使用函数指针作为参数,并自己模拟strcmp。
h> int bit(int n) { int count=0; while(n) { n=n&(n-1); count...
用我们平时十进制转换二进制的算法,即短除法。例如:x&(x-1) 当x=5时,5的二进制是0101 0101&(0101-1) == 0101&0100==01000100&(0100-1) == 0100&0011==0000一共计算了两次,也就是说5的二进制数一共只有2个1.下面是代码实现:
printf("十进制数0转成二进制数为0\n");printf("1的个数为0\n");printf("0的个数为1\n");} c = a;for(i=0;i<1000;i++)b[i]=0;i=0;while(a!=1){ b[i]=a%2;a=a/2;i++;} k=i-1;printf("十进制数%d转成二进制数为%d",c,a);for(i=k;i>=0;i--)printf(...