#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位整數。以及如何釋放分配給結果的內存。請幫助我解決這個問題。
'Ĵ =(unsigned int)結果;'...爲什麼?整數轉換指針與實現高度相關。如果需要,使用'uintptr_t'。 –
不要使用強制轉換來消除編譯器錯誤。相反,問你做錯了什麼。 –
@SouravGhosh更好地問爲什麼'j'需要首先是任何類型的整數。 –