Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
9 / 9 / 5
Регистрация: 10.05.2012
Сообщений: 292

Тип данных 6 байт

10.07.2012, 00:31. Показов 3295. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
занялась виртуальной машиной, а у меня там целый и дробный тип данных имеет размер 6 байт. причём у дробного - 1 бит это знак, 7 - порядок и 40 - мантисса. спросила как можно сделать у преподователя - он мне сказал возьми для дробного double и отрежь лишнее
0_0 как можно double порезать??
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.07.2012, 00:31
Ответы с готовыми решениями:

Прием данных с COM-порта и отделение трёх байт в цикле. Буфер?
Всем доброго времени суток! На COM-порт приходит сигнал вида: ... 00 86 40 00 87 40 00 86 40 ... Прием реализован так: ...

Тип данных ф-ции.
Привет всем. При написании сего кода: void clc(TObject* Sender) { ShowMessage("FUCK YEAH!"); } ...

Структурный тип данных
Ученики школы характеризуются данными: фамилия, улица, дом, квартира. Обеспечить ввод и вывод информации о 3х учениках. a) Определить,...

10
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
10.07.2012, 00:37
Цитата Сообщение от PinkPink Посмотреть сообщение
занялась виртуальной машиной, а у меня там целый и дробный тип данных имеет размер 6 байт. причём у дробного - 1 бит это знак, 7 - порядок и 40 - мантисса.
по моему это паскалевский Real
0
9 / 9 / 5
Регистрация: 10.05.2012
Сообщений: 292
10.07.2012, 01:03  [ТС]
Речь идёт о C++
хотела сделать число float+short как раз было бы 6 байт
но у float под порядок, насколько я знаю, 8 бит выделяется. а мне нужно 7
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
10.07.2012, 01:10
Цитата Сообщение от PinkPink Посмотреть сообщение
Речь идёт о C++
Я догадываюсь
но такой формат был только в паскале(если я не ошибаюсь)
Цитата Сообщение от PinkPink Посмотреть сообщение
float+short как раз было бы 6 байт
ага только у плавующих кодировка присутствует
надо брать массив 6 байт
а по поводу перекодировки
тебе надо посмотреть как устроены float double и Real
я на память не помню но они описаны в любой книге на сопроцессоры
0
9 / 9 / 5
Регистрация: 10.05.2012
Сообщений: 292
10.07.2012, 01:13  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
Я догадываюсь
но такой формат был только в паскале(если я не ошибаюсь)

ага только у плавующих кодировка присутствует
надо брать массив 6 байт
а по поводу перекодировки
тебе надо посмотреть как устроены float double и Real
я на память не помню но они описаны в любой книге на сопроцессоры
какого типа будут данные этого массива? смутно представляю как из этого сделать дробное число
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
10.07.2012, 01:15
посмотри нарыл в интернете
http://habrahabr.ru/post/112953/
может поможет
кстати насчет перевода
тебе надо сделать массив 10 байт для Дубли
и 6 для реала
и какие то байты выбросить
0
9 / 9 / 5
Регистрация: 10.05.2012
Сообщений: 292
10.07.2012, 01:30  [ТС]
кстати, не мог бы ты пояснить что означает данная запись и как с ней работать?:
C++
1
2
3
4
unsigned uiMant1 : 32;
unsigned uiMant2 : 8;
unsigned uiExp : 7;
unsigned uiSign : 1;
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
10.07.2012, 02:17
по моему это битовые поля
мне не приходилось работать нужду не было
но вот статейка
http://netlib.narod.ru/library... h06_09.htm
по поводу плавуюших
насчет дубли я обшбся
8 бит
вот её схема
63 бит знак
62-52 порядок
51-0 мантиса
т.е тебе не только мантису переделать (всего то несколько бит с конца выбросить)
но и порядок из десяти бит сделать семь , здесь посложнее что отбрасывать будем старшие???
тогда если там перебор то надо приводить к бесконечности

Добавлено через 1 минуту
Цитата Сообщение от PinkPink Посмотреть сообщение
сделать у преподователя - он мне сказал возьми для дробного double и отрежь лишнее
шутник он у тебя или стандарта IEEE не знает

Добавлено через 26 минут
я вот че надыбал
Тип Real, как уже упоминалось, стоит особняком. Во-первых, в нём используется другой порядок следования битов, а, во-вторых, не используется денормализованная форма. Я не стал детально разбираться с типом Real, потому что сейчас это нужно разве что историкам, но никак не программистам.
так что не так то просто перевести
попробую порытся в книгах при помощи ассемблерных команд сопроцессора перевести
но это смогу сделать не раньше четверга
1
4192 / 1839 / 222
Регистрация: 06.10.2010
Сообщений: 4,125
10.07.2012, 06:43
он мне сказал возьми для дробного double и отрежь лишнее
Можно и так. Для каждой арифметической операции конвертируй свой real в double, а потом обратно.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
10.07.2012, 07:42
Цитата Сообщение от murderer Посмотреть сообщение
свой real
расскажи мне тип переменной в С подобный паскалевскому Real-у

Цитата Сообщение от murderer Посмотреть сообщение
свой real в double
не все так просто
у реала мантиса 40 бит у дубли 52
ну здесь просто откинь поледние 12 бит и все
экспонента у дубли 10 байт (ххх-512) у реала 7 (ххх-64)
и как перевести +0 -0 плюс бесконечность минус бесконечность (когда выйдем из порядка Реала)
таблицами???

проще было бы взять float (из меньшей точности большую сделать проще) добавил пару пустых (0-х)байт и все
но
флоат экспонента 8 байт реал 7
соответственно мантиса 23 байта и 40



расскажи мне алгоритм перевода

плюс real не поддерживает денормализованного представления



самый простой способ (мне кажется) написать Dll на delfi и в ней конвертировать паскалевскими методами
0
4192 / 1839 / 222
Регистрация: 06.10.2010
Сообщений: 4,125
10.07.2012, 11:23
расскажи мне алгоритм перевода
Извиняюсь за кривой код. Для проверки специально подобрал число на котором видна потеря точности при конвертации.
Код
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <conio.h>
 
typedef unsigned char real[6];
 
//Извлекает len битов из x по смещению ofs
unsigned long long extract(void *x, int ofs, int len)
{
    return (*reinterpret_cast<unsigned long long*>(x) >> ofs)&(((unsigned long long)1<<len)-1);
};
 
void Real2Double(real *a, double *b)
{
    unsigned long long sign     = extract(a,47,1);
    unsigned long long exponent = extract(a,40,7)-((1<<6)-1);
    unsigned long long mantissa = extract(a,0,40);
    *reinterpret_cast<unsigned long long*>(b) = (sign<<63)+((exponent+((1<<10)-1))<<52)+(mantissa<<(52-40));
};
 
void Double2Real(double *a, real *b)
{
    char tmp[8];
    unsigned long long sign     = extract(a,63,1);
    unsigned long long exponent = extract(a,52,11)-((1<<10)-1);
    unsigned long long mantissa = extract(a,0,52);
    *reinterpret_cast<unsigned long long*>(tmp) = (sign<<47)+(((exponent+((1<<6)-1))&0x7F)<<40)+(mantissa>>(52-40));
    (*b)[0]=tmp[0];
    (*b)[1]=tmp[1];
    (*b)[2]=tmp[2];
    (*b)[3]=tmp[3];
    (*b)[4]=tmp[4];
    (*b)[5]=tmp[5];
};
 
real   a;
double b=349877189797.513;
 
int main()
{
    printf("%f\n",b);
    Double2Real(&b,&a);
    Real2Double(&a,&b);
    printf("%f",b);
    getch();
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.07.2012, 11:23
Помогаю со студенческими работами здесь

Тип данных струкруры
помогите разобраться с типом данных делаю курсовую задания на структуры у меня вышло что все данные типа char как сделать чтобы поля...

Точный тип данных
Подскажите пожаоуйста самый точный тип данных в который можно перевести из AnsiString В вопросах, связанных с Билдером, спрашивайте в...

Тип данных float
Здравствуйте. У меня проблема с типом данных. С текстового файла я считываю цифры типа 0.00300, 0.014500 и т.д. Затем мне нужно...

Тип данных учетверенной точности в C/C++
Подскажите, имеется ли в C/C++ тип данных учетверенной точности (16 байт), т.е. удвоенной по сравнению с double? В фортране такая штука...

Создать свой тип данных
Приветствую всех. Мне необходимо создать свой тип данных - сетевой адрес прибора. Физически адрес может состоять из 1 или 4-х байт. Начал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru