IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> напечатать копию памяти в битовом виде, real формат преобразовать надо
Pukelis
сообщение 9.05.2005 21:31
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Мужской

Репутация: -  0  +


Например, дана переменная
a:real;

мы ей присваиваем значение, скажем,
a:=25;

и ето надо представить в виде 101101 110011 ........
интегер вроде легче реализовать.. а как с реалом быть??

заранее спасибо! smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
Ответов(1 - 19)
volvo
сообщение 9.05.2005 21:51
Сообщение #2


Гость






Только вот зачем это тебе - ума не приложу. Ничего даже отдаленно напоминающего 25 ты там все равно не увидишь...

function binary(x: longint; num_of_bits: byte): string;
var
s: string;
i, bit: byte;
begin
s := '';
for i := 0 to 31 do begin
bit := (x shl i) shr (31);
s := s + chr(ord('0') + bit)
end;
delete(s, 1, 32 - num_of_bits);
binary := s
end;

var
a: real;
type
arrbyte = array[1 .. maxint] of byte;

var
arr: arrbyte absolute a;
i: byte;
begin
a := 25;

for i := 1 to sizeof(a) do
write( binary(arr[i], 8) );
end.
 К началу страницы 
+ Ответить 
Pukelis
сообщение 9.05.2005 22:07
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 9.05.05 21:51)
Только вот зачем это тебе - ума не приложу. Ничего даже отдаленно напоминающего 25 ты там все равно не увидишь...

то есть? что-то не совсем понял, что ты етим в виду имеешь.. Да, я еще проверил, что прога выводит, если ей 1 подставить:

0000000000000000000000000000000000000000000000001111000000111111

ето нормально? мне тут друг, сидящий рядом, говорит, что должны быть все нули и тока одна единица..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 9.05.2005 22:17
Сообщение #4


Гость






А я знаю? Ты просил память распечатать, я распечатал :D
Цитата
мне тут друг, сидящий рядом, говорит, что должны быть все нули и тока одна единица..
Это почему это так? Это все-таки не LongInt. Тут же еще знаковые биты мантиссы, экспоненты, сама экспонента, "неприкасаемые биты"... Не все так просто... :no:
 К началу страницы 
+ Ответить 
Pukelis
сообщение 9.05.2005 22:48
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Мужской

Репутация: -  0  +


ок, панятна))

теперь несколько вопросов по самой ф-ции
В справке к паскалю пишут:
shl - logical shift left
shr - logical shift right
ето как понять? ;) что за логический сдвиг?

32 ето потому что 32 бита в 4 байтах...

delete(s, 1, 32 - num_of_bits);
binary := s

это мы обнуляем стринговые переменную и функцию?

absolute a - абсолют ето как я понял из справки - нужен для корректной работы с памятью? ;-)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
SHnur
сообщение 9.05.2005 23:01
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 81
Пол: Мужской
Реальное имя: Шурик

Репутация: -  0  +


Цитата
arr: arrbyte absolute a;

говорит что arr это переменная типа arrbyte начинающаяся по адресу переменной a .

volvo , убрал ...

Сообщение отредактировано: SHnur - 9.05.2005 23:54


--------------------
Двадцать пятый час в сутках может появиться всего лишь из-за небольшой ошибки в программе.
Чтобы не воспользоваться сумасшедшими возможностями, нужно быть идиотом.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 9.05.2005 23:28
Сообщение #7


Гость






SHnur,
ссылки на форуме никто не отменял - уже есть пост, в котором описаны SHL и SHR - не надо плодить одинаковые объяснения (тем более, что оно у тебя далеко не полное) - просто даем ссылку...

N - ый бит
 К началу страницы 
+ Ответить 
Pukelis
сообщение 13.05.2005 13:32
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Мужской

Репутация: -  0  +


блин... только что попробовал отчитаться - так препод меня спросил
1) что за цифры 31 и 32.. они ему не понравились
здесь
for i := 0 to 31 do begin
и здесь d
elete(s, 1, 32 - num_of_bits);

2) что за цифра 8 тут
write( binary(arr[i], 8) );

3) а так же спрашивал зачем нужен longint тут:
function binary(x: longint; num_of_bits: byte): string;

4) и вообше он сказал, что в строке, которую печатает прога подозрительно много цифр! :p2:

что ответить - я не особо нашелся ((( объясните как ответить ему на ети вопросы!! Желательно в течение етого часа - пока он еще тут.. Ето последняя прога, которую мне надо сдать в етом году.. ;) ПЛИЗ!!!

А так же он просил указать, где в етих байтах содержится экспонента, знак, число и мантиса.. тоже бы хотелось узнать smile.gif дайте линк, хде ето написано!!

Сообщение отредактировано: Pukelis - 13.05.2005 13:33
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.05.2005 13:47
Сообщение #9


Гость






Цитата(Pukelis @ 13.05.05 13:32)
1) что за цифры 31 и 32.. они ему не понравились

А твой препод знает, сколько байт (и, соответственно, бит) содержится в переменной типа LongInt ? Вот от 0-го до 31-го и проходим по всем smile.gif
А потом удаляем все незначащие (в delete)

Цитата(Pukelis @ 13.05.05 13:32)
2) что за цифра 8 тут
write( binary(arr[i], 8) );

Ну, я же приводил к типу
type
arrbyte = array[1 .. maxint] of byte;

а в каждом байте 8 бит... Можно было привести к массиву Word-ов, тогда надо было бы делать:
write( binary(arr[i], 16) );


Цитата(Pukelis @ 13.05.05 13:32)
3) а так же спрашивал зачем нужен longint тут:
function binary(x: longint; num_of_bits: byte): string;

А чтобы работать с МАКСИМАЛЬНО возможной скоростью (которая достигается при обработке за один раз наибольшего числа бит)

Цитата(Pukelis @ 13.05.05 13:32)
4) и вообше он сказал, что в строке, которую печатает прога подозрительно много цифр!

А ты попроси его сказать, СКОЛЬКО она должна печатать? И какой размер у Real тоже уточни у него... И умножь на 8 байт.
 К началу страницы 
+ Ответить 
Pukelis
сообщение 13.05.2005 13:53
Сообщение #10


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Мужской

Репутация: -  0  +


а что про экспоненту, мантису и знак говорить? ;) что-то я ща в яндексе ничего не нашел путного про них(((
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.05.2005 14:04
Сообщение #11


Гость






Порядок бит в Real такой:
Цитата
| 1 бит (знаковый) | 7 бит (экспонента) | 40 бит (мантисса) |
 К началу страницы 
+ Ответить 
hiv
сообщение 13.05.2005 14:42
Сообщение #12


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Volvo, под моим BP7 твоя программа выдала:
100001010000000000000000000000000000000001001000

у тебя наверно другой компилятор, в BP7 тип real занимает 6 байт или 48бит.


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.05.2005 14:47
Сообщение #13


Гость






А что, у меня где-то сказано другое?
Вот что у меня выдается:
100001010000000000000000000000000000000001001000

А что касается автора темы - то надо у него спросить, какой у него компилятор... Уж очень длинное число у него печатается...
 К началу страницы 
+ Ответить 
Pukelis
сообщение 14.05.2005 19:00
Сообщение #14


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Мужской

Репутация: -  0  +


у мя freepascal, 8 байт соответственно.. Так и не сдал тогда. Ета зараза спрашивала, как формируется точка в экспоненте.. хде про ето почитать???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Pukelis
сообщение 18.05.2005 21:06
Сообщение #15


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Мужской

Репутация: -  0  +


достал подобную прогу, правда она для extended формата.. хотя как я понимаю, если в 5-й строчке extended поменять на real, то она будет работать, вот тока надо как-то убрать лишние нули в начале (правда оно почему-то авдает совсем другие вещи, нежели то, что volvo мне накатал в самом начале) и я по-прежнему не фтыкаю в отображение мантисы в битовом виде (((


var
n, i, kiek:integer;
bitai:array[1..80] of byte;
mentise:array[1..80] of byte;
ext_sk: extended absolute bitai;
x:byte;
begin
repeat
n:=0;
i:=0;
kiek:=0;
write('Iveskite extended tipo skaiciu: ');
readln(ext_sk);
for i:=1 to sizeof(ext_sk) do
begin
x:=bitai[i];
for n:=1 to 8 do
begin
mentise[80-kiek]:=x mod 2;
x:= x div 2;
kiek:=kiek+1;
end;
end;
writeln('S Exp Mentise');
write(mentise[1], ' ');
for i:= 2 to 16 do
begin
write(mentise[i]);
end;
write(' ');
for i:=17 to 80 do write(mentise[i]);
readln(n);
until n=0;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 18.05.2005 22:40
Сообщение #16


Гость






Цитата(Pukelis @ 18.05.05 21:06)
хотя как я понимаю, если в 5-й строчке extended поменять на real, то она будет работать

Да не будет она работать !!! У тебя здесь все построено на том, что Extended занимает 80 бит. Но Real - то занимает всего 48 ! Так что тебе все индексы менять придется...
 К началу страницы 
+ Ответить 
hiv
сообщение 19.05.2005 11:14
Сообщение #17


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Цитата
и я по-прежнему не фтыкаю в отображение мантисы в битовом виде (((

это зависит от реализации компилятора


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Pukelis
сообщение 19.05.2005 18:40
Сообщение #18


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Мужской

Репутация: -  0  +


у меня FPC.. там real 64 бита занимает, как double - мне так препод сказал.. Так что исправил все индексы, как советовал ув. Volvo и теперь оно выдает следующее:

5

0 100000000010100000000000000000000000000000000000000000000000000

-5

1 100000000010100000000000000000000000000000000000000000000000000

0.5

0 011111111100000000000000000000000000000000000000000000000000000

0.05

0 011111110101001100110011001100110011001100110011001100110011010

0.005

0 011111101110100011110101110000101000111101011100001010001111011

1-й бит - ето бит знака. 101 - ето 5 в битовом виде.. а остальное??? (((

Сообщение отредактировано: Pukelis - 19.05.2005 18:41
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.05.2005 19:14
Сообщение #19


Гость






Цитата(стандарт ANSI/IEEE Std 754-1985)
Для вещественных чисел используется нормализованное представление со смещенным порядком. То есть, во-первых, число приводится к виду

A = ±M*2^(±P),
1/2 <= M <= 1,

где M -- мантисса, P -- порядок. Так как в результате старший разряд числа всегда равен единице, его в памяти не хранят (<<скрытый бит>> или <<скрытая единица>>). Порядок хранится в смещенном коде (<<модифицированный порядок>>): P' = P+2n-1, где n -- число разрядов машинного представления порядка. Для представления нуля обнуляются все биты и мантиссы, и порядка

Стандарт IEEE определяет 4-, 8- и 10-байтовое представление вещественных чисел.

Real: 8 бит порядка, 23 бита мантиссы; диапазон примерно от ±1,2.10-38 (ненормализованные от ±1,5.10-45) до ±3,4.1038. Соответствует 7-8 значащим цифрам в десятеричном представлении.1

Double: 11 бит порядка, 52 бита мантиссы; диапазон примерно от ±2,2.10-308 (ненормализованные от ±5,0.10-324) до ±1,8.10308. Соответствует 15-16 значащим цифрам в десятеричном представлении

Extended: 15 бит порядка, 64 бита мантиссы; диапазон примерно от ±8.10-4933 (ненормализованные от ±3.10-4932) до ±6.104931. Соответствует 19-20 значащим цифрам в десятеричном представлении


Так лучше?
 К началу страницы 
+ Ответить 
Pukelis
сообщение 19.05.2005 19:35
Сообщение #20


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Мужской

Репутация: -  0  +


спасибо, надеюсь, теперь етого хватит smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 13:55
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"