Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2013, 03:16   #1
ivan1492
 
Регистрация: 18.03.2013
Сообщений: 5
По умолчанию Тип Long Double. (язак Си)

нужно число типа лонг дабл перевести в двоичный код, используя структуру FILE. У меня есть код, как сделать через union, но с FILE проблемы возникли.
Код:
#include <stdio.h>
#include <conio.h>
void output (char mass[10])
{
	int buf_bit,i,j;
	for (i=(sizeof(long double)-9);i>0;i--)
	{
		for(j=31;j>=0;j--)
		{
			buf_bit=(mass[i]>>j)&1;
			printf("%d",buf_bit);
		}
	}
}
int main (void)
{
	long double l;
	long double buf;
	clrscr();
	union
	{
		long double simvol;
		char mass[10];
	}chislo;

	printf ("input tipa long double==>>\n");
	scanf("%Lf", &buf);
	chislo.simvol=buf;
	output (chislo.mass);
	getch();
	return 0;
}
Язык Си. Подскажите пожалуйста.
ivan1492 вне форума Ответить с цитированием
Старый 26.03.2013, 17:52   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Так, для сведения:
Код:
mass[i]>>j
при j>=8 это всегда 0. Вас не смутило, что у Вас получается 320 бит?

А какие проблемы с FILE*? Открываем файл на запись с флагом b, пишем long double. Закрываем, открываем на чтение, читаем char[10].
Abstraction вне форума Ответить с цитированием
Старый 26.03.2013, 23:30   #3
ivan1492
 
Регистрация: 18.03.2013
Сообщений: 5
По умолчанию

флаг b потому что бинарный режим? и вы сказали, что получается 320 бит, подскажите в каком месте исправить, чтоб получилось 8.
ivan1492 вне форума Ответить с цитированием
Старый 27.03.2013, 10:43   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
флаг b потому что бинарный режим?
Ну да.
Цитата:
и вы сказали, что получается 320 бит, подскажите в каком месте исправить, чтоб получилось 8.
Тип long double имеет размер 8 бит? Это ново.
Слушайте, Вы вообще понимаете собственный код? Вот что, по Вашему мнению, делает этот цикл?
Код:
		for(j=31;j>=0;j--)
		{
			buf_bit=(mass[i]>>j)&1;
			printf("%d",buf_bit);
		}
Abstraction вне форума Ответить с цитированием
Старый 08.05.2013, 03:40   #5
El_Pharaoh
Новичок
Джуниор
 
Регистрация: 08.05.2013
Сообщений: 1
Счастье

Мудрёно тут всё как-то...
Походу ТС не шарит в вопросе и ему надо готовое решение...
В принципе, тип не особо влияет на процедуру перевода в двоичную систему. Когда мне это было надо, я накатал такую функцию:
Код:
void makemybin(char mhex, char* chsl)
{
    char nmbrs[2]={'0', '1'}, x;
    for (x=3; x>-1; x--)
    {
        chsl[x]=nmbrs[mhex&1];
        mhex>>=1;
    }
}
(мне надо было из шестнадцатеричной системы переводить, поэтому в названии переменной присутствует hex - для справки, чтоб было понятно)
А что значит "используя структуру FILE" я даже предположить не могу...
El_Pharaoh вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Маленькая мантисса long double Teodor Общие вопросы C/C++ 2 04.02.2013 14:33
Отличие double и long double в Вижиал cover Общие вопросы C/C++ 1 14.10.2012 13:53
Сравнение long double (Invalid floating...) h8# C++ Builder 1 20.01.2011 23:05
Long double. Максимальная точность. juzam Общие вопросы C/C++ 2 05.10.2010 14:48
long double vs. double VoidMan Общие вопросы C/C++ 1 21.09.2009 18:45