#include"stdio.h"
#include"Stdio.h"
int main()
{
int *p;
int x,i;
printf("输入一个十进制整数:");
scanf_s("%d", &x);
p = (int *)malloc(sizeof(int) * 32);//为二进制分配内存空间
if (x < 0)//负数转正 如果为负数 二进制第一位为1 正数则为0
{
*p = 1;
x = -x;
}
else if (x > 0) *p = 0;
//判断正负 改首位
//-----------------------------------------------------------------------
for(i=31;i>=1;i--)//原码
{
*(p+i) = x % 2;
x = x / 2;
}
//-----------------------------------------------------------------------
//二进制取补码规则;若x为负数则 源码换反码 且反码末位加1
if (*p == 1)//换反码
{
for (i = 1; i <=31; i++)
{
if (*(p+i) == 1) *(p + i) = 0;
else *(p + i) = 1;
}
}
if (*p == 1)//负数
{
if (*(p+31) == 0) *(p + 31) = 1;//最后一位为0 则直接加1
else if (*(p + 31) == 1) //最后一位为1 进位
{
for (i = 1; i <= 31; i++)
{
if (*(p + 31) + 1 == 2 )//逢2进1
{
*(p + 31) = 0;
*(p +30) += 1;
}
else if (i > 0 && *(p + i) == 2)
{
*(p + i) = 0;
*(p + i+1) += 1;
}
}
}
}
//-----------------------------------------------------------------------
for (i = 0; i <= 31; i++)//输出
{
printf("%d", *(p + i));
}
printf("\n");
system("pause");
return 0;
}
初学阶段,算法可能有问题,不妥的多提意见…
参考资料:
1.十进制转换为二进制、原码、反码、补码、移码. 2.二进制补码 百度百科.
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/180121.html原文链接:https://javaforall.cn