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