10进制数转16位2进制补码

来源:互联网 发布:饥荒 知乎 编辑:程序博客网 时间:2024/06/08 17:04

bug:负数,结果计算错误

//

// main.c

//  10进制转2进制

//

// Created by LongMa on 15/8/7.

//  Copyright (c) 2015年 itcast. All rights reserved.

//

 

#include <stdio.h>

 

int main(intargc,const char* argv[])

{

    // insertcode here...

    int num = 32;

    int a[16];

    for (int i =0; 2; i++)

    {

        if (0 == num )//不是 0 == num / 2,因为这样的话,num == 1时,就符合,并没有被保存!

       {

           for (int j =i ; j < 16 ; j++)//使得没被除的部分全为0

           {

               a[j] = 0;

           }

           break;

       }else

       {

           a[i] = num % 2;

           num /= 2;

       }

    }

    

    //逆序输入 每4个 隔开显示

  for (int j =15; j >= 0; j--)

    {

       

       printf("%d",a[j]);

       if (j == 4 || j ==8 || j ==12 )

       {

           printf("\t");

       }

    }

    return 0;

}

改进:

//  main.c

//  10进制转2进制

#include <stdio.h>

#include "Jz10to2.h"

int main(intargc,const char* argv[])

{

    // insertcode here...

    int num = -32;

    int a[16];

    if( num >= 0)

    {

       Jz10to2(a,num);

        /* 逆序输出 */

       for (intj =15; j >= 0;j--)

       {

           printf("%d",a[j]);

           if (j == 4 || j ==8 || j==12 )

           {

               printf("\t");

           }

       }

 

    }else

    {

       Jz10to2(a,-num);

       for (intj =15; j >= 0;j--)

       {

            if (0 == a[j ])//负数时,先调用函数计算正数的原码,再在这做判断,0110即可

           {

               a[j ] = 1;

           }else

           {

               a[j ] = 0;

           }

           printf("%d",a[j]);

           if (j == 4 || j ==8 || j==12 )

           {

               printf("\t");

           }

       }

 

       

    }

    return 0;

}

 

//

// Jz10to2.c

#include "Jz10to2.h"

void  Jz10to2(inta[16],intnum)

{

    for (int i =0; 2;i++)

    {

        if (0 == num )//不是 0 == num / 2,因为这样的话,num == 1时,就符合,并没有被保存!

       {

           for (int j = i ; j <16 ; j++)//使得没被除的部分全为0

           {

               a[j] = 0;

           }

           break;

       }else

       {

           a[i] = num % 2;

           num /= 2;

       }

   }

    //return *a;//返回数组的值时,要用  *a;改为void类型,没必要返回参数,因为传的是地址

}

//

//  Jz10to2.h

#ifndef___50807____________Jz10to2__

#define___50807____________Jz10to2__

 

#include <stdio.h>

 

void  Jz10to2(int a[16],int num);

 

#endif /* defined(___50807____________Jz10to2__) */

0 0