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

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

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

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> напечатать копию памяти в битовом виде, real формат преобразовать надо
сообщение
Сообщение #1


Новичок
*

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

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


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

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

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

заранее спасибо! smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


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

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

0000000000000000000000000000000000000000000000001111000000111111

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


Гость






А я знаю? Ты просил память распечатать, я распечатал :D
Цитата
мне тут друг, сидящий рядом, говорит, что должны быть все нули и тока одна единица..
Это почему это так? Это все-таки не LongInt. Тут же еще знаковые биты мантиссы, экспоненты, сама экспонента, "неприкасаемые биты"... Не все так просто... :no:
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Пионер
**

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

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


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

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

volvo , убрал ...

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


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


Гость






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

N - ый бит
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 байт.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

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

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


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


Гость






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


Профи
****

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

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


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

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


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


Гость






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

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


Новичок
*

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

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


у мя freepascal, 8 байт соответственно.. Так и не сдал тогда. Ета зараза спрашивала, как формируется точка в экспоненте.. хде про ето почитать???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Гость






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

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


Профи
****

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

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


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

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


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 значащим цифрам в десятеричном представлении


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


Новичок
*

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

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


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

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

 





- Текстовая версия 28.03.2024 22:44
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name