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

bug:负数,结果计算错误

//

// main.c

//  10进制转2进制

//

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

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

//

 

#include

 

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

#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

 

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

 

#endif /* defined(___50807____________Jz10to2__) */

你可能感兴趣的:(10进制数转16位2进制补码)