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__) */
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__) */
相关文章推荐
- TCP三次握手及其背后的缺陷
- iOS应用内部切换语言,不跟随系统
- iOS 宏(define)与常量(const)的正确使用
- 《搜索引擎---信息检索实践》(读书笔记)
- POJ_1470_ClosestCommonAncestors
- HDOJ1698 Just a Hook(线段树)
- 如何在防火墙或路由器中禁止访问一些公司不相关网站
- 读写锁
- Codeforces Round #130 (Div. 2) A. Dubstep(STL做法)
- springMVC MultipartFile file文件上传及参数接受
- Microsoft Dynamics CRM server 2013 系统和SQL server 备份 为升级 CRM 2015版本准备
- Microsoft Dynamics CRM server 2013 系统和SQL server 备份 为升级 CRM 2015版本准备
- delphi之模拟点击网页中的按钮
- 算法题:求二进制位中0的个数
- 命名管道客户端及服务器端简单代码示例
- HDOJ1394 Minimum Inversion Number(线段树)
- UI019---ITableviewcell的性能问题和缓存优化
- POJ_2352_Stars
- CentOS增加swap分区
- 使用Xcode实现第一个C语言程序——Hello world