-
- тупо: zeleny(66 знак., 19.02.2015 14:04)
- Я вот не уверен, выравнивание структур в юнионах всегда ли упакованное? "Просто структуру" я бы точно в прагму закатал, а вот структуру в юнионе надо ли? - Николай Коровин(18.02.2015 20:32)
- В общем поигрался я с юнионами, с вариантами, что POV подсказал. Один фиг компилятор бороду делает, но вариант от POVа на два байта меньше получился. В общем, всем спасибо. :) - Звероящер(19.02.2015 09:52)
- А во что соберётся *((u16 *)(my_char_array)) ? Я обычно на интеле так пишу, регистров мало, рама в кэши отмаплена, так что адресов не стесняюсь. - Николай Коровин(19.02.2015 17:07)
- "На два байта меньше"?!! Это клиника! Срочно к дохтуру! - SciFi(19.02.2015 10:18)
- Ну это я к тому, что в итоге пофиг как делать :) А привычка считать байты от асма с тинькаим осталась. - Звероящер(19.02.2015 12:06)
- Вот-вот, бросайте эту вредную привычку, "иначе времени на отдых не останется" © - SciFi(19.02.2015 12:15)
- Ну это я к тому, что в итоге пофиг как делать :) А привычка считать байты от асма с тинькаим осталась. - Звероящер(19.02.2015 12:06)
- скорее всего у автора восьмибитник и целая жизнь впереди - VL(19.02.2015 09:26,
)
- Угадали. АВРка у меня. - Звероящер(19.02.2015 09:45)
- В общем поигрался я с юнионами, с вариантами, что POV подсказал. Один фиг компилятор бороду делает, но вариант от POVа на два байта меньше получился. В общем, всем спасибо. :) - Звероящер(19.02.2015 09:52)
- Или так? USSR(155 знак., 18.02.2015 17:30,
)
- Так? USSR(82 знак., 18.02.2015 17:26,
)
- Чтобы мог сдвигался влево-вправо по кольцу? - Олдфаг(18.02.2015 17:07,
)
- Плохой способ, есть зависимость от endianless процессора. Твой пример - для BIG_ENDIAN!!!. Правильно - использовать 2-байтовую переменную. А для доступа к отдельным байтам использовать такие выражения: il-2(397 знак., 18.02.2015 16:18)
- Cтрока var = (var & 0xFFFF) | lobyte; ошибочна. Надо var = (var & 0xFF00) | lobyte; - Petrovich(19.02.2015 12:25,
)
- Ну в общем, все всё поняли :-) - il-2(20.02.2015 11:30)
- С Union можно препроцессором IFом, проверить BIG или LITLE, и выбрать нужный typedef - OlegPowerC(18.02.2015 16:22)
- Именно что! Переносимость не должна доходить до абсурда, когда в глубине вложенных циклов однокомандная операция превращается в пять арифметических. А препроцессор никому не стоит ни такта. Минус -- отлаживать надо обе ветви, ну или на одной Николай Коровин(37 знак., 18.02.2015 20:27)
- Вы с Олегом несколько заблуждаетесь :-) Мой вариант решения по сравнению с использованием union выигрывает и в плане переносимости, и в плане оптимальности результирующего кода!!!. Нет там никаких "пяти арифметических операций". Любой компилятор il-2(280 знак., 19.02.2015 11:28)
- Всё, убедили, эксперимент -- палач любой теории. Я, правда, всё равно такие мелочи или не экономлю вообще, или уж асмом пишу целую врезку... но галочку в уме поставил, спасибо. - Николай Коровин(19.02.2015 17:01, ссылка)
- Я такого не говорил, более того, так как вы, я делаю повсеместно. Я лишь показал решение с объединениями, для совместимости с big/little endian - OlegPowerC(19.02.2015 13:05)
- Вы с Олегом несколько заблуждаетесь :-) Мой вариант решения по сравнению с использованием union выигрывает и в плане переносимости, и в плане оптимальности результирующего кода!!!. Нет там никаких "пяти арифметических операций". Любой компилятор il-2(280 знак., 19.02.2015 11:28)
- Именно что! Переносимость не должна доходить до абсурда, когда в глубине вложенных циклов однокомандная операция превращается в пять арифметических. А препроцессор никому не стоит ни такта. Минус -- отлаживать надо обе ветви, ну или на одной Николай Коровин(37 знак., 18.02.2015 20:27)
- Cтрока var = (var & 0xFFFF) | lobyte; ошибочна. Надо var = (var & 0xFF00) | lobyte; - Petrovich(19.02.2015 12:25,
- А чем не нравится свой вариант? aoreh(319 знак., 18.02.2015 15:29 - 15:31)
- Так и мне Union в голову сразу пришел, а чем плохо то? - OlegPowerC(18.02.2015 15:30)
- Вот... POV(89 знак., 18.02.2015 14:56)
- Не. Мне результат нужно в чарах оставить. - Звероящер(18.02.2015 14:58)
- А величина сдвига-то фиксированая? При сдвиге на 1 компилятор не хотит сдвиг использовать. Отсюда и отсутствие флага переноса. - POV(18.02.2015 15:04 - 15:09)
- Величина сдвига разная. - Звероящер(19.02.2015 09:43)
- Тогда вообще никак, работая с половинками. Ведь сначала полностью выполнится hi>>x (потеряв все промежуточные флаги переноса) и лишь затем lo>>x. - POV(19.02.2015 09:51)
- Дык, потом обратно по-другому... Звероящер(131 знак., 19.02.2015 12:03)
- Тогда вообще никак, работая с половинками. Ведь сначала полностью выполнится hi>>x (потеряв все промежуточные флаги переноса) и лишь затем lo>>x. - POV(19.02.2015 09:51)
- Величина сдвига разная. - Звероящер(19.02.2015 09:43)
- А величина сдвига-то фиксированая? При сдвиге на 1 компилятор не хотит сдвиг использовать. Отсюда и отсутствие флага переноса. - POV(18.02.2015 15:04 - 15:09)
- Не. Мне результат нужно в чарах оставить. - Звероящер(18.02.2015 14:58)
- Нету на Сях никакого переноса, потому и не сделать по-простому... - Apтём(18.02.2015 14:48)
- Да я в курсе, вот поэтому и спрашиваю :) Может есть шаманство с битами, циклами и прочими дефайнами... - Звероящер(18.02.2015 14:50)