c语言代码:将任意十进制整数(包括负数)转化为二进制数

c语言代码:将任意十进制整数(包括负数)转化为二进制数,求解决。。

负数是在正数的基础上取反再+1
整数按32位处理,正数转换结果:

img


负数转换结果:

img

代码如下:

#include <stdio.h>

//将正整数转换为二进制(32位)
void trans(int n,char buf[])
{
    int i=0;
    for(i=0;i<32;i++)
        buf[i]='0';
    i=31;
    while(n)
    {
        buf[i]=n%2+'0';
        i--;
        n/=2;
    }
}

int main()
{
    int n,i,flag=1;
    char buf[33]={0};
    printf("请输入一个数:");
    scanf("%d",&n);
    if(n>=0)
        trans(n,buf);
    else
    {
        trans(-n,buf);
        //取反
        for(i=31;i>=0;i--)
        {
            //取反
            if(buf[i]=='0')
                buf[i]='1';
            else 
                buf[i] = '0';
        }
        //+1
        for(i=31;i>=0;i--) //flag表示进位
        {
            if(flag==1 && buf[i]=='1')
            {
                buf[i]='0';
                flag = 1;
            }else if(flag==1 && buf[i]=='0')
            {
                buf[i]='1';
                flag = 0;
            }else if(flag==0 && buf[i]=='0')
            {
                buf[i]='0';
                flag = 0;
            }else
            {
                buf[i]='1';
                flag = 0;

            }
        }
        
    }
    printf("%s",buf);
    return 0;

}

#include <stdio.h>                  //引用头文件
main()
{
    int i,j,n,m,a[16]={0};            //定义变量i,i,m,和数组a[],并赋初值为0;
    printf("请输入您想转化的十进制数字:(0-32767):");         //输入转化的数字
    scanf("%d",&n);
    for(m=0;m<15;m++)             //for循环从014位,最高位为符号位,本题始终为0;
    {
        i=n%2;                    //每次取n%2的余数;
        j=n/2;                    //把n/2的整数部分赋值给j,
        n=j;                    //让j=n;从n再执行下一次循环。
        a[m]=i;                    //并把每次的余数i赋给数组a[];
    }

    for(m=15;m>=0;m--)         //for循环,将数组中的元素倒叙输出,即为转化后的二进制数字。
    {
        printf("%d",a[m]);

        if(m%4==0)            //为了格式美观,每隔四个数字打印一个空格。
            printf(" "); 
    }
    printf("\n");
}

代码如下(仅正整数的实现):

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main( )
{
    int n,i=0;
    double sum=0;
    printf("输入一个正整数:\n");
    scanf("%d",&n);
    do{
        if(n % 2 == 1) sum += pow(10,i);   //D = (n % 2) * pow(10,i)
        n /= 2;                          //n = n / 2
        i++;                             //i = i + 1
    }while(n != 0);                      //非 0,则重复“除 2 取余”转换
    printf("二进制数序列是:%.0lf\n",sum);
    return 0;
}

运行结果如图:

img


题主可在此基础上,扩展一下,写一下负数的实现。
希望对题主有所帮助,可以的话,帮忙点个采纳!