#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
Der Zweck dieses Programms ist, Dezimalzahl in Binärzahl zu konvertieren. Die Hauptfunktion ruft die Funktion bin() auf, um dezimal in binär zu konvertieren.Warum gibt der Zeiger von der aufgerufenen Funktion den Wert nicht zur aufrufenden Funktion zurück?
Logik des Codes: - Nehmen wir vorzeichenlose Ganzzahl (32 Bit), die aus 0-31 Bits bestehen. Um eine Binärdarstellung einer Ganzzahl ohne Vorzeichen zu drucken, beginnen Sie mit dem 31. Bit, prüfen Sie, ob das 31. Bit EIN oder AUS ist, wenn es EIN ist, drucken Sie "1", andernfalls drucken Sie "0". Jetzt überprüfe, ob das 30. Bit EIN oder AUS ist, wenn es EIN ist, drucke "1", sonst drucke "0", mach das für alle Bits von 31 bis 0, schließlich werden wir eine Binärdarstellung der Zahl erhalten.
Ich bin verwirrt, wie viel Platz malloced werden sollte, um 32bits von Ganzzahl zu speichern. Und wie man Speicher freigibt, der zum Ergebnis zugeteilt wird. Bitte helfen Sie mir mit diesem Code aus.
'j = (unsigned int) Ergebnis; '... warum ?? Zeiger auf Integer-Konvertierung ist stark abhängig von der Implementierung. Benutze 'uintptr_t' wenn nötig. –
Verwenden Sie keine Umwandlungen, um Compilerfehler stummzuschalten. Frag stattdessen, was du falsch machst. –
@SouravGhosh besser fragen, warum 'j' in erster Linie eine ganze Zahl von irgendeinem Typ sein muss. –