我是靠谱客的博主 昏睡饼干,最近开发中收集的这篇文章主要介绍10进制数转16位2进制补码,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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__) */

最后

以上就是昏睡饼干为你收集整理的10进制数转16位2进制补码的全部内容,希望文章能够帮你解决10进制数转16位2进制补码所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部