| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Два Byte в Word Не сложение!!! |
| Автор: RinOSpro 19.6.2008, 11:55 | ||
| Есть скажем 2 байтовых переменных и переменная Word и нужно пометить один байт в старший разряд а другой в младший разряд. (не сложить!); Я сделал это таким споссобом:
Есть ли другие споссобы? |
| Автор: Snowy 19.6.2008, 12:33 | ||
| Логическими операциями или вариантной записью. Логическими логичнее
|
| Автор: Beltar 19.6.2008, 13:08 |
| Еще один извращенский вариант использовать указатели. |
| Автор: Virtuals 19.6.2008, 13:11 | ||
извращения с волшебной палочкой ABSOLUTE но возможностей куча. тоесть вообще никаких операций не нужно делать ни сдвигов ни умножения, а просто обьявить переменные в одних и тех же местах
|
| Автор: Virtuals 19.6.2008, 13:28 |
| . а как удалять сообщения? |
| Автор: Snowy 19.6.2008, 13:59 |
| Никак. Только участники Клуба и выше имеют такую возможность. |
| Автор: RinOSpro 19.6.2008, 14:14 |
| Snowy ты уверен что это точнее я так делал... но отказался в пользу умножения. тк. что то это глючило помоему хотя хз... В общем спасибо! Щас выберу оптимальный вариант. Добавлено через 10 минут и 27 секунд Сорь... я у себя проглядел и вместо or поставил and поэтому понятно почему глючило... |
| Автор: Snowy 19.6.2008, 14:26 |
| Моя запись идентична твоей. Только работает быстрее и работает правильно. Рассмотрим поотдельности. 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 19.6.2008, 14:30 | ||
| Директиву absolute, не желательно использовать, так как это усложнит перенос на Delphi.NET. По крайней мере Codeger не рекомендует ее использовать. Вообще, красивее будет так
Дело в том что чисто логически b1 shl 8 должен дать 0, потому что операнд 8ми битовый, но компилятор оптимизирует вычисления расширяя байтовые операнды до 32х битовых слов, потому это будет работать. |