напечатать копию памяти в битовом виде, real формат преобразовать надо |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
напечатать копию памяти в битовом виде, real формат преобразовать надо |
Pukelis |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 18 Пол: Мужской Репутация: 0 |
Например, дана переменная
a:real; мы ей присваиваем значение, скажем, a:=25; и ето надо представить в виде 101101 110011 ........ интегер вроде легче реализовать.. а как с реалом быть?? заранее спасибо! |
volvo |
Сообщение
#2
|
Гость |
Только вот зачем это тебе - ума не приложу. Ничего даже отдаленно напоминающего 25 ты там все равно не увидишь...
function binary(x: longint; num_of_bits: byte): string; |
Pukelis |
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 18 Пол: Мужской Репутация: 0 |
Цитата(volvo @ 9.05.05 21:51) Только вот зачем это тебе - ума не приложу. Ничего даже отдаленно напоминающего 25 ты там все равно не увидишь... то есть? что-то не совсем понял, что ты етим в виду имеешь.. Да, я еще проверил, что прога выводит, если ей 1 подставить: 0000000000000000000000000000000000000000000000001111000000111111 ето нормально? мне тут друг, сидящий рядом, говорит, что должны быть все нули и тока одна единица.. |
volvo |
Сообщение
#4
|
Гость |
А я знаю? Ты просил память распечатать, я распечатал :D
Цитата мне тут друг, сидящий рядом, говорит, что должны быть все нули и тока одна единица.. Это почему это так? Это все-таки не LongInt. Тут же еще знаковые биты мантиссы, экспоненты, сама экспонента, "неприкасаемые биты"... Не все так просто... :no: |
Pukelis |
Сообщение
#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 - абсолют ето как я понял из справки - нужен для корректной работы с памятью? ;-) |
SHnur |
Сообщение
#6
|
Пионер Группа: Пользователи Сообщений: 81 Пол: Мужской Реальное имя: Шурик Репутация: 0 |
Цитата arr: arrbyte absolute a; говорит что arr это переменная типа arrbyte начинающаяся по адресу переменной a . volvo , убрал ... Сообщение отредактировано: SHnur - -------------------- Двадцать пятый час в сутках может появиться всего лишь из-за небольшой ошибки в программе.
Чтобы не воспользоваться сумасшедшими возможностями, нужно быть идиотом. |
volvo |
Сообщение
#7
|
Гость |
SHnur,
ссылки на форуме никто не отменял - уже есть пост, в котором описаны SHL и SHR - не надо плодить одинаковые объяснения (тем более, что оно у тебя далеко не полное) - просто даем ссылку... N - ый бит |
Pukelis |
Сообщение
#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: что ответить - я не особо нашелся ((( объясните как ответить ему на ети вопросы!! Желательно в течение етого часа - пока он еще тут.. Ето последняя прога, которую мне надо сдать в етом году.. ;) ПЛИЗ!!! А так же он просил указать, где в етих байтах содержится экспонента, знак, число и мантиса.. тоже бы хотелось узнать дайте линк, хде ето написано!! Сообщение отредактировано: Pukelis - |
volvo |
Сообщение
#9
|
Гость |
Цитата(Pukelis @ 13.05.05 13:32) 1) что за цифры 31 и 32.. они ему не понравились А твой препод знает, сколько байт (и, соответственно, бит) содержится в переменной типа LongInt ? Вот от 0-го до 31-го и проходим по всем А потом удаляем все незначащие (в delete) Цитата(Pukelis @ 13.05.05 13:32) 2) что за цифра 8 тут write( binary(arr[i], 8) ); Ну, я же приводил к типу type а в каждом байте 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 |
Сообщение
#10
|
Новичок Группа: Пользователи Сообщений: 18 Пол: Мужской Репутация: 0 |
а что про экспоненту, мантису и знак говорить? ;) что-то я ща в яндексе ничего не нашел путного про них(((
|
volvo |
Сообщение
#11
|
Гость |
Порядок бит в Real такой:
Цитата | 1 бит (знаковый) | 7 бит (экспонента) | 40 бит (мантисса) | |
hiv |
Сообщение
#12
|
Профи Группа: Пользователи Сообщений: 660 Пол: Мужской Реальное имя: Михаил Репутация: 11 |
Volvo, под моим BP7 твоя программа выдала:
100001010000000000000000000000000000000001001000 у тебя наверно другой компилятор, в BP7 тип real занимает 6 байт или 48бит. -------------------- Никогда не жадничай. Свои проблемы с любовью дари людям!
|
volvo |
Сообщение
#13
|
Гость |
А что, у меня где-то сказано другое?
Вот что у меня выдается: 100001010000000000000000000000000000000001001000 А что касается автора темы - то надо у него спросить, какой у него компилятор... Уж очень длинное число у него печатается... |
Pukelis |
Сообщение
#14
|
Новичок Группа: Пользователи Сообщений: 18 Пол: Мужской Репутация: 0 |
у мя freepascal, 8 байт соответственно.. Так и не сдал тогда. Ета зараза спрашивала, как формируется точка в экспоненте.. хде про ето почитать???
|
Pukelis |
Сообщение
#15
|
Новичок Группа: Пользователи Сообщений: 18 Пол: Мужской Репутация: 0 |
достал подобную прогу, правда она для extended формата.. хотя как я понимаю, если в 5-й строчке extended поменять на real, то она будет работать, вот тока надо как-то убрать лишние нули в начале (правда оно почему-то авдает совсем другие вещи, нежели то, что volvo мне накатал в самом начале) и я по-прежнему не фтыкаю в отображение мантисы в битовом виде (((
|
volvo |
Сообщение
#16
|
Гость |
Цитата(Pukelis @ 18.05.05 21:06) хотя как я понимаю, если в 5-й строчке extended поменять на real, то она будет работать Да не будет она работать !!! У тебя здесь все построено на том, что Extended занимает 80 бит. Но Real - то занимает всего 48 ! Так что тебе все индексы менять придется... |
hiv |
Сообщение
#17
|
Профи Группа: Пользователи Сообщений: 660 Пол: Мужской Реальное имя: Михаил Репутация: 11 |
Цитата и я по-прежнему не фтыкаю в отображение мантисы в битовом виде ((( это зависит от реализации компилятора -------------------- Никогда не жадничай. Свои проблемы с любовью дари людям!
|
Pukelis |
Сообщение
#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 - |
volvo |
Сообщение
#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 |
Сообщение
#20
|
Новичок Группа: Пользователи Сообщений: 18 Пол: Мужской Репутация: 0 |
спасибо, надеюсь, теперь етого хватит
|
Текстовая версия | 11.01.2025 9:24 |