Лабораторная по Паскалю
| |
Техник | Дата: Суббота, 15 Сентября 2012, 11:51 | Сообщение # 1 |
Глава X-ray Games
Сейчас нет на сайте
| Доброго времени суток, в вузе задали написать лабу на Паскале. Смысл задания в следующем: есть вещественное число,есть массив из 6 элементов типа байт,надо узнать где у этого вещественного числа мантисса,а где порядок,используя абсолютную перменную. То,что порядок идет перед мантиссой уже понял, но как его вытянуть из эл-тов массива,ведь первый бит указывает знак числа,а в первом эл-те сразу 8 бит. Или есть мысль побитовой работы с каждым элементом. Но стоит ли, может есть что-нибудь проще? Code var r:real; m:array[1..6] of byte absolute r;
begin readln(r);
{пытаюсь вывести значения,которые находятся в массиве, но там нет ничего близкого к значению порядка и мантиссы} {...} end.
|
|
| |
TimKruz | Дата: Суббота, 15 Сентября 2012, 16:44 | Сообщение # 2 |
старожил
Сейчас нет на сайте
| Quote (Техник) ведь первый бит указывает знак числа,а в первом эл-те сразу 8 бит Не первый, а седьмой, потому что биты в байте нумеруются справа налево начиная с нуля: 7-6-5-4-3-2-1-0. Если по условию задачи нельзя использовать тип shortint, то можно использовать условие типа if m[1]>127 then, потому что если включён (=1) седьмой бит, то значение переменной равно или больше 128 (до 255). Можно ещё использовать какую-нибудь логическую операцию, например, m[1] and 128 - результат либо 128 (7-й включён), либо 0 (7-й выключен). Ещё можно использовать битовый сдвиг вправо/влево - shr/shl. Например, логически сдвинув вправо на 7 бит, получим значение седьмого бита - результат будет либо 0, либо 1, потому что седьмой бит окажется нулевым, а остальные потеряются.
|
|
| |
Техник | Дата: Воскресенье, 16 Сентября 2012, 08:53 | Сообщение # 3 |
Глава X-ray Games
Сейчас нет на сайте
| А как определить в каких байтах лежит мантисса,а в каких порядок?
|
|
| |
Archido | Дата: Воскресенье, 16 Сентября 2012, 11:38 | Сообщение # 4 |
Сэнсэй
Сейчас нет на сайте
| Quote (Техник) А как определить в каких байтах лежит мантисса,а в каких порядок? Так гуглить, не? Институт тем и примечателен, что учит быстро и правильно искать необходимую информацию
На самом деле не все так просто. Если нужен именно 6-ти байтовый Real, то необходимо указывать Real48 - это и есть хитрый и устаревший 6-байтовый флоат, у которого совсем не все как у людей. В более ли менее современных делфях тип Real является 8-ми байтным, аля Double. Если нужен Double, то и массив должен состоять из 8-ми элементов соответственно. Если хорошенько загуглить, то можно найти неплохой мануалчег по языку и его типам в том числе:
Вот это современный Real аля Double (8 байт). 1 бит - знак, следующие 11 - порядок, остальное - мантисса. Собсна, вытаскивать нужно в обратном порядке.
А вот он Real48:
Знак на том же месте, но порядок и мантиссу тут поменяли местами. 1 бит - знак, следующие 39 - мантисса, и 8 - под порядок. В этом случае порядок окажется в первом элементе массива E := m[1], в остальных пяти мантисса + знак. Знак можно получить как Sign := (m[6] shr 7);
Вообще интересно, что тебе дальше с этим нужно делать?
Для примера можно сделать как-нибудь так: Code F: Real48; M: array[1..6] of Byte absolute F; Bits: array[0..47] of Byte;
I, J: Integer; begin F := -5.656;
for I := 1 to 6 do for J := 0 to 7 do begin Bits[47 - ((I - 1) * 8 + J)]:= (M[I] shr J) and 1; end; В массиве Bits будет F в двоичной системе в виде, собсна, битов. Их положение и порядок совпадают с тем, что приведено на картинках. Берешь нужные и усе
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Воскресенье, 16 Сентября 2012, 12:14 |
|
| |
Техник | Дата: Понедельник, 17 Сентября 2012, 20:30 | Сообщение # 5 |
Глава X-ray Games
Сейчас нет на сайте
| А как можно сделать автоматическое определение где мантисса,а где порядок?
|
|
| |
Archido | Дата: Вторник, 18 Сентября 2012, 04:26 | Сообщение # 6 |
Сэнсэй
Сейчас нет на сайте
| Quote (Техник) А как можно сделать автоматическое определение где мантисса,а где порядок? Никак нельзя, да и в чем смысл? Обычно вещественных типов всего несколько штук и по каждому можно найти информацию о его представлении в памяти, нафига что-то автоматически определять то?
Ты лучше расскажи, что конкретно в задании требуется, а то такое чувство, что ты сам точно не знаешь что нужно.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Вторник, 18 Сентября 2012, 06:45 |
|
| |
|