![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| RinOSpro |
|
|||
|
Unregistered |
Есть скажем 2 байтовых переменных и переменная Word и нужно пометить один байт в старший разряд а другой в младший разряд. (не сложить!);
Я сделал это таким споссобом:
Есть ли другие споссобы? |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Логическими операциями или вариантной записью.
Логическими логичнее
|
|||
|
||||
| Beltar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 3 Всего: 7 |
Еще один извращенский вариант использовать указатели.
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
| Virtuals |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 476 Регистрация: 27.11.2006 Репутация: 3 Всего: 11 |
извращения с волшебной палочкой ABSOLUTE но возможностей куча. тоесть вообще никаких операций не нужно делать ни сдвигов ни умножения, а просто обьявить переменные в одних и тех же местах
Это сообщение отредактировал(а) Virtuals - 19.6.2008, 13:43 |
|||
|
||||
| Virtuals |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 476 Регистрация: 27.11.2006 Репутация: 3 Всего: 11 |
.
а как удалять сообщения? Это сообщение отредактировал(а) Virtuals - 19.6.2008, 13:35 |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
||||
|
||||
| RinOSpro |
|
|||
|
Unregistered |
Snowy ты уверен что это точнее я так делал... но отказался в пользу умножения. тк. что то это глючило помоему хотя хз...
В общем спасибо! Щас выберу оптимальный вариант. Добавлено через 10 минут и 27 секунд Сорь... я у себя проглядел и вместо or поставил and поэтому понятно почему глючило... |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Моя запись идентична твоей. Только работает быстрее и работает правильно.
Рассмотрим поотдельности. w := (b1 *$FF) + b2; b1 *$FF - тут у тебя ошибка. Умножать нужно на $100. Суди сам. Допустим b1 = 1, тогда b1 * $FF = $FF, что есть $00FF, а не $0100 Разумеется, при таком сдвиге, наложение нижнего байта будет давать полную ересь. b1 *$100 = сдвигу на 8 байт вверх. Точнее влево. $XX00 + $YY - сложение здесь не требуется, ибо у исходного числа нижние байты пустые, а у прибавляемого нет верхних байтов. Таким образом быстрее проще наложить нижние байты второго, вместо нижних первого. А разница будет, т.к. в твоём коде 2 ошибки: 1. Не присвоено b2 2. Неверно выполнен сдвиг первого байта. А для проверки правильности, выполни IntToHex(w, 2) и выведи результат на экран. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Директиву absolute, не желательно использовать, так как это усложнит перенос на Delphi.NET. По крайней мере Codeger не рекомендует ее использовать.
Вообще, красивее будет так
Дело в том что чисто логически b1 shl 8 должен дать 0, потому что операнд 8ми битовый, но компилятор оптимизирует вычисления расширяя байтовые операнды до 32х битовых слов, потому это будет работать. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |