#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-й бит или выключен, если он включен, напечатайте «1» еще раз «0». Теперь проверьте, включен или выключен 30-й бит, если он включен. Распечатайте «1», а затем «0», сделайте это для всех бит от 31 до 0, наконец, мы получим двоичное представление числа.
Я смущен, сколько места должно быть malloced для хранения 32 бит целого числа. И как освободить память, выделенную для результата. Пожалуйста, помогите мне с этим кодом.
'J = (unsigned int) result; '... почему? указатель на целочисленное преобразование сильно зависит от реализации. используйте 'uintptr_t', если необходимо. –
Не используйте приведения, чтобы отключить ошибки компилятора. Вместо этого спросите, что вы делаете неправильно. –
@SouravGhosh лучше спросить, почему 'j' должно быть целым числом любого типа в первую очередь. –