码迷,mamicode.com
首页 > 其他好文 > 详细

进制转换

时间:2014-11-15 21:48:52      阅读:270      评论:0      收藏:0      [点我收藏+]

标签:style   io   sp   for   div   on   2014   问题   bs   

将一个整数转换成二进制形式,考虑负数情况。

这个问题在思维模式上没有什么难得,只是要在编程中注意到一些细节,注意+0和-0的情况。大致思想是:
#1.求出对应绝对值的原码
#2.除最高位,按位取反
#3.位低位加1
/*************************************************************************
    > File Name: b.c
    > Author: 傻李
    > Mail: hellojukay@gmail.com 
    > Created Time: 2014年11月15日 星期六 20时01分35秒
 ************************************************************************/
#include<string.h>
#include<stdio.h>
#include<math.h>
int result[sizeof(int) * 8];

void translate(int a)
{
	int c,i;
	int tmp;//保存目标的绝对值
	tmp = abs(a);
	memset(result,0,sizeof(int) * 8);
	if(a == 0)
	{
		for(i = 0; i < sizeof(int) * 8; ++i)
			result[i] = 0;
		return ;
	}
	for(i = 0; i < sizeof(int) * 8 - 1; ++i)
	{
		result[i] = tmp % 2;
		tmp = tmp / 2;
	}
    //默认符号位0
	result[i] = 0;
	//负数求补码过程
	if(a < 0)
	{
		result[sizeof(int) * 8 - 1] = 1;
		for(i =0 ; i < sizeof(int) * 8 - 1;++i)
		{
			//除最高最位,按位取反
			switch(result[i])
			{
				case 1:
					result[i] = 0;
					break;
				case 0:
					result[i] = 1;
					break;
			}
		}
	//尾数加1
	c = 1;
	for(i = 0; i <  sizeof(int) && c != 0; ++i)
	{
		tmp = result[i];//此处tmp保存临时值
		result[i] = result[i] ^ c;
		c = tmp & c;
	}
	}
}

int main()
{
	int a;
	scanf("%d",&a);
	translate(a);
	int i;
	for(i = sizeof(int)*8 -1; i >= 0; --i)
	{
		printf("%d",result[i]);
	}
	return 0;
}


进制转换

标签:style   io   sp   for   div   on   2014   问题   bs   

原文地址:http://blog.csdn.net/u013163178/article/details/41151569

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!