【发布时间】:2017-03-24 03:09:15
【问题描述】:
#include<stdio.h>
#include<stdlib.h>
unsigned int *bin(int);
int main(void)
{
unsigned int n=0,*i=NULL;
printf("Enter no:");
scanf("%d",&n);
i=bin(n);
printf("Binary no: %d\n",*i);
return 0;
}
unsigned int *bin(int n)
{
unsigned int i=0,j=0;
static unsigned int *result=NULL;
result=(unsigned int*)malloc(1*sizeof(unsigned int));
printf("Result=%p\n",result);
j=(unsigned int)result;
for(i=(1<<31);i>0;i=(i>>1))
{
if(n & i)
{
*result=1;
result++;
}
else
{
*result=0;
result++;
}
}
result=(unsigned int*)j;
printf("Result=%p\n",result);
return result;
}
Output :
Enter no:6
Address of Result=0x2576010
Address of Result=0x2576010
Binary no: 0
本程序的目的是将十进制数转换为二进制数。主要功能是调用bin()函数将十进制数转换为二进制数。
代码逻辑:- 让我们取无符号整数(32 位),它由 0-31 位组成。要打印无符号整数的二进制表示,从第 31 位开始,检查第 31 位是 ON 还是 OFF,如果是 ON,则打印“1”,否则打印“0”。现在检查第 30 位是 ON 还是 OFF,如果是 ON 打印“1”,否则打印“0”,对从 31 到 0 的所有位执行此操作,最终得到数字的二进制表示。
我很困惑应该分配多少空间来存储 32 位整数。以及如何释放分配给结果的内存。请帮我解决这个代码。
【问题讨论】:
-
j=(unsigned int)result;... 为什么?指向整数转换的指针高度依赖于实现。如果需要,请使用uintptr_t。 -
不要使用强制转换来消除编译器错误。相反,问问你做错了什么。
-
@SouravGhosh 最好先问问为什么
j必须是任何类型的整数。 -
result=(unsigned int*)malloc(1*sizeof(unsigned int));您在这里分配了 4 个字节(或者可能是 8 个字节,具体取决于您的平台)的内存,这还不够。但是有更多的问题,代码真的很奇怪。 -
你分配了多少个整数? 打印出那个号码。那是你想做的吗?再说一次,你在最终的 printf 中打印了多少个整数?与您分配的号码相同吗?如果没有,为什么不呢?