写一个函数返回参数二进制中 1 的个数 比如: 15     0000 1111     4 个 1

方法一:
程序:
#include<stdio.h>
int  count_one_bits(int t)
{
int i = 32;
int count = 0;
while (i>0)
{
if (t & 1 == 1)
{
count++;
}
//t=t/2
t = t >> 1;
i -= 1;
}
return count;
}
int main()
{
int t = 0;
printf("请输入一个整数:");
scanf("%d", &t);
int  ret=count_one_bits(t);
printf("count=%d\n", ret);
return 0;
}
方法二:
程序:
#include<stdio.h>
int  count_one_bits(int t)
{
int count = 0;
while (t)
{
count++;
t = t&(t - 1);
//最低位为1,其余全为0,循环效率高,有几个1就循环几次
}
return count;
}
int main()
{
int t = 0;
printf("请输入一个整数:");
scanf("%d", &t);
int  ret=count_one_bits(t);
printf("count=%d\n", ret);
return 0;
}
结果一:
请输入一个整数:15
count=4
请按任意键继续. . .
 
结果二:
请输入一个整数:-2
count=31
请按任意键继续. . .
时间: 2024-10-26 22:24:56

写一个函数返回参数二进制中 1 的个数 比如: 15     0000 1111     4 个 1的相关文章

写一个函数返回参数二进制中 1 的个数

#include<stdio.h>int main(){   int num; int s=0,ys=0,count=0;  printf("请输入一个数字:");    scanf("%d",&num);     for(s=num;s>=1;)     {     ys=s%2;         s=s/2;         if (ys==1)      {    count++;         }     }    printf(

写一个函数返回参数二进制中 1 的个数(三种方法)

1.运用了除法,取余方式递推出结构2.运用右移符(>>)运算3.利用算术与(&)运算 三种方法效率越来越高,减少成本 #include<stdio.h> int Number1(int n) { int k; int count=0; while (n > 0) { k = n % 2; n /= 2; if (1 == k) { count++; } } return count; } int Number2(int n) { int count = 0; whil

一个函数返回参数二进制中 1 的个数

方法一: #include<stdio.h> int bit_count(unsigned int n) { int count; for (count = 0; n; n &= n - 1) { count++; } return count; } int main() { int y; int c; printf("请输入一个数:"); scanf("%d", &c); y = bit_count(c); printf("%

用C语言写一个函数返回参数二进制中1的个数

首先,给出正确的C语言代码如下: #include <stdio.h> int count_one_bits(unsigned int value) { int count =0; while(value) { if(value%2==1) { count++; } value=value/2; } return count; } int main() { unsigned int num=0; int ret=0; scanf("%d",&num); ret=co

写一个函数返回参数二进制中1的个数

分析: (1)输入一个数 (2)判断它是否为0. (3)如果不为0,就对它进行模2取余,模2的过程就相当于把这个数向右移除了一位,如果余数为1,则证明移除的这一位为1,就将其记录下来.如果余数为0,就证明移除的这一位为0,就不记录. (4)经过第3步以后,对这个数进行除2取整,再进入到第2步中.如此循环,直到第3步中判断为0. 注意: (1)对于负数,在内存中是以其补码形式存放的.例如-1,它的二进制中有32个1. (2)以下方法中对于函数形参的定义方式有两种,一种是无符号整型,一种是有符号整型

用一个函数返回参数二进制中1的个数

//题目:写一个函数返回参数二进制中的1的个数 //      比如:15    0000 1111  4个1 //     程序原型:  int count_one_bit(unsigned int value) //                {  //                        //返回1的个数 //                 }     #include<stdio.h> #include<stdlib.h> int count_one_bit

写一个函数,将字符串中空格替换为%20。

写一个函数,将字符串中空格替换为%20.样例:"abc defgx yz"替换为"abc%20defgx%20yz".这道题是一道简单的字符和字符串替换题,字符的替换直接用指针即可,每次都需要把空格后的字符串保存到一个数组中,然后把空格替换为%20后再将刚刚拷贝的字符串拷贝到%20的后面,代码如下: Fun(char str){char p = str;char arr[20];while (p != '\0'){if (p == ' '){strcpy(arr,

编写一个函数将参数字符串中的字符反向排列

编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列. 要求:不能使用C函数库中的字符串操作函数. 注意:将参数字符串中的字符反向排列,不是反向输出. 代码如下: #include<stdio.h> #include<stdlib.h> #include<assert.h> int my_strlen(char *str)//求字符串长度 { int count=0; while(*str++) { co

[编程之美]写一个函数,返回一个数组中所有元素被第一个元素除的结果

题目: 写一个函数,返回一个数组中所有元素被第一个元素除的结果: 错误的版本: void DivArray(int *array, int n) { for (int i = 0; i < n; ++i) { array[i] /= array[0]; } } 错误原因:在循环的第一步,第一个元素就变成了1,然后再用它去除以其他元素,就不符合题目要求了 改进: 1:使用其他变量保存第一个元素: void DivArray3(int *array, int n) { assert(array !=