1、写一个函数返回参数二进制中 1 的个数(三种方法)2、获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列3、输出一个整数的每一位。4、两个int(32位)整数m和n的二进制表达中,有多

本文提供多个C语言实现的方法来处理整数的二进制表示,包括计算二进制中1的个数、分离奇偶位并打印整数的每一位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

比如: 15 0000 1111 4 个 1

1、只能处理正数


#include <stdio.h>


int main()


{

    

    int count = 0 ;

    

    int num = 15 ;

    

    //0000 1111

    

    while(num)

        

    {

        

        if( num%2==1)

            

            count ++;

        

        num = num /2;

        

    }

    

    printf ("%d\n", count);

    

    return 0;   

}

2、

#include <stdio.h>


int main()


{

    

    int count = 0 ;

    

    int num = -1 ;

    

    int i = 0;

    

    for (i=0;i<32;i++)

        

    {

        

        if (((num>>1)&1)==1)

            

            count ++;

        

    }

    

    

    

    

    

    printf ("%d\n", count);

    

    return 0;

    

}

3、

按位与运算符“&”是双目运算符。

其功能是参与运算的两数各对应的二进位相与。只要对应的二个二进位都为1时,结果位就为1。

参与运算的两个数均以补码出现。

C/C++中的“按位与”
规则:
1&1=1
1&0=0
0&1=0
0&0=0

#include<stdio.h>

int main ()

{

    int count = 0;

    int num = 15;

    while(num)

    {

    num= num&(num-1);

    count ++;

    }

    printf ("%d",count);

    return 0;

}

2.获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。 

#include<stdio.h>

int main()

{

    int arr[32];

    int m=0,i=0,count=0;

    printf("请输入一个十进制数:\n");

    scanf("%d",&m);

    for(i=0;m!=0;i++)

    {

        arr[i]=m%2;

        m=m/2;

        count=i+1;

    }

    for(;count<32;count++)

    {

        arr[count]=0;

    }

    printf("转换为二进制后奇数位为:\n");

    for(i=31;i>=0;i-=2)

    {

        printf("%d ",arr[i]);

    }

    printf("\n");

    printf("转换为二进制后偶数位为:\n");

    for(i=30;i>=0;i-=2)

    {

        printf("%d ",arr[i]);

    }

    printf("\n");

    return 0;

}


3
 输出一个整数的每一位 

#include <stdio.h>

int main()

{

    int data;

    int temp;

    printf("请输入一个整数:");

    scanf("%d",&data);

    while(data>0)

    {

        temp = data%10;

        printf ("%d",temp);

        data=data/10;

    }

    return 0;

}

4.两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?

#include <stdio.h>


int main()

{

    int m=0;

    int n=0;

    int q=0;

    int i=0;

    int count=0;

    printf("请输入两个数字:");

    scanf("%d%d",&m,&n);

    q=m^n;  // 两个数按位异或,对应不同的位将会置1

    while(q)

    {

        q=q&(q-1);  //按位与方法计算一个整数中比特位为1的个数

        count++;

    }

    printf("count=%d",count);

    system("pause");

    return 0;

}











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值