обьясните как разделять на биты типы данных! |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
обьясните как разделять на биты типы данных! |
rum200 |
Сообщение
#1
|
Группа: Пользователи Сообщений: 2 Пол: Мужской Реальное имя: Cfif Репутация: 0 |
Раз элементы стека имеют тип байт, операция Push(a:byte) помещает в стек один байт, а функция Pop:byte извлекает байт из стека с соответствующим изменением в обеих случаях значения указателя. Для типа integer необходимо раздробить двухбайтовую переменную на два байте и дважды использовать Push, а при извлечении - склеить два последовательно извлеченных байта в одно
integer. Для longint аналогично, но работая с группами по 4 байта. Сообщение отредактировано: rum200 - |
andriano |
Сообщение
#2
|
Гуру Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
Раз элементы стека имеют тип байт, операция Push(a:byte) помещает в стек один байт, а функция Pop:byte извлекает байт из стека с соответствующим изменением в обеих случаях значения указателя. Для типа integer необходимо раздробить двухбайтовую переменную на два байте и дважды использовать Push, а при извлечении - склеить два последовательно извлеченных байта в одно integer. Для longint аналогично, но работая с группами по 4 байта. Вообще-то я не вижу ничего общего между заголовком и телом темы. По поводу заголовка: биты извлекаются из числа соответствующими логическими операциями, например, бит номер n (начиная с 0): MyBit := (MyNumber shr n) and 1; Обратно возвратить бит в число можно, например, так: MyNumber := (MyNumber and (not(1 shl n)) or (MyBit shl n); По поводу тела: Во-первых, никто не ограничивает длину объекта, с которым работает стек именно 1 байтом. Если стек реализуется ручками на ЯВУ, то заихиваь можно хоть строки переменной длины. Если же речь идет о языке Ассемблера, то разрядность запихиваемого числа равняется разрядности АЛУ, т.е. для 16-разрядных процессоров запихиваться будет 2 байта, для 32-разрядых - 4, а 64-разрядных - 8. Сообщение отредактировано: andriano - |
Текстовая версия | 29.04.2024 23:29 |