概述
有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__) */
最后
以上就是昏睡饼干为你收集整理的10进制数转16位2进制补码的全部内容,希望文章能够帮你解决10进制数转16位2进制补码所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复