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

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

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

> обьясните как разделять на биты типы данных!
сообщение
Сообщение #1





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

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


Раз элементы стека имеют тип байт, операция Push(a:byte) помещает в стек один байт, а функция Pop:byte извлекает байт из стека с соответствующим изменением в обеих случаях значения указателя. Для типа integer необходимо раздробить двухбайтовую переменную на два байте и дважды использовать Push, а при извлечении - склеить два последовательно извлеченных байта в одно
integer. Для longint аналогично, но работая с группами по 4 байта.

Сообщение отредактировано: rum200 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Michael_Rybak
*****

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

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


Смотри.

Представь себе, что у тебя органичение - не в двоичной системе, а в десятичной.

А именно - стек принимает трехзначные десятичные числа, а тебе нужно записать туда шестизначное, и потом извлечь.

Это понятно как делать - сначала три нижних разряда, потом - три верхних:

Помещение в стек:
Push(x mod 1000);
Push(x div 1000);

Извлечение:
x := Pop();
x := x + 1000 * Pop();

Почему 1000? Потому, что 1000 - это 10 в кубе: 10, потому что это основание десятичное системы счисления, а в кубе - потому что нам нужны три цифры.

Теперь смотрим, какая задача у тебя. Что такое байт? Это восемь бит. Переменная, занимающая один байт - это попросту восьмизначное *двоичное* число. А тебе нужно работать с шестнадцатизначным.

Поступаем совершенно аналогично - сначала нижние 8 бит, потом - верхние:

Помещение в стек:
Push(x mod 256);
Push(x div 256);

Извлечение:
x := Pop();
x := x + 256 * Pop();

Почему 256? Потому, что 256 - это 2 в восьмой: 2, потому что это основание двоичной системы счисления, а в восьмой - потому что нам нужно 8 бит.

Для longint попробуй сам.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 





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