您的位置:首页 > 其它

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

2015-08-10 00:26 309 查看
<
4000
span style="background:#FFFF00;">有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 ])//负数时,先调用函数计算正数的原码,再在这做判断,0变1,1变0即可

           {

               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__) */
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: