Неправда! Нет в этой книжке такой задачи, как “Изменение старшего байта 4 байтного числа”. А знаете почему нет? Потому, что это говнокод! Вы пытаетесь учиться говнокодить, не научившись программированию.
Я Вам всю эту тему пытаюсь объяснить, что Вы не тому учитесь. Это Вам ничего не даст. Будете ещё одним говнокодером, а то их у нас мало.
Ну хорошо пусть начало темы говнокод … я не спорю потом то я пытался разобраться , что такое стек воочию так сказать без кода … просто как и что работает …
Не всегда. Если t - битовая маска, то это нормальный код.
А если t - число - то, конечно говнокод. начнём с того, что его работоспособность сильно зависит от используемой архитектуры. Число меняет знак при такой операции, да до хрена чего.
Если Вам нужно выполнить подобную операцию с числом, так и работайте как с числом! Напишите то же самое обычными операциями с числами. Компилятор и без Вас соптимизирует и сделает примерно как сейчас написано, но это будет переносимо и корректно.
Вы про что , про то как работает , я ж вроде выше расписал , или про то что такое стек…
Стек область памяти куда заносятся данные по принципу что положил последнее то вытащил первым. используется для хранения временных данных , таких как адреса возврата из функций … у стека есть указатель колторый указывает на свободный адрес в начале стека. адреса по мере заполнения уменьшаюстя… Указатель SP - регистр для данного авр 16 битный… имеет кода 3Dh и 3Eh . Указатель изменяется аппаратно , поэтому чтобы закинуть данные под них высвобождается сперва место заносится новый пустой адрес в SP , а потом нужные данные заносятся в освободившиеся место ( по крайне мере в авр )
конкретно в данном случае 0x00FFFFFF маска используемая с опператором & ,
а вот t я использую не как , число , а как 4 байта обьедененые общим признаком , и мне в моем коде нужно менять не целиком а побайтно , не затрагивая остальные байты… сперва сделал разложмил изменил сложил …но как и написал не камильфо вот и решил со сдвигами т.к это часто используют в си…
Не удивит …
Если посмотрите первое сообщение я именно с этим эту тему и пришел … У меня как раз и не получалось изменить старший байт … правда я про инт32 вначале не думал …
В итоге на кидали разных решений и я решил разобраться в них… Ну в последнем немного поконкретнее т.к там указатели а меня пока что интересует все что с ними связано…
А не надо “для данного авр”. Я просто спросил что такое стек. Вы не поверите, но он существовал за десятки лет до авр.
Ну, если это маска, то хрен с Вами, зачем только в заголовке про число писали.
Только Вы так ни хрена пока не разобрались, а в Вашей строке ляп (как я уже писал). Вы, что его не запускали на исполнение и не проверяли? Это самый страшный грех для того, кто хочет учиться программированию.
Не в моей , это мне решение написали … хотя в моей тоже … какя и говорил именно с этим пришел…
насчет число в заголовке… ну если бы написал изменить один байт в 4 байтах … меняб вообще заклевали неразобьравшись
Роман! Твоя любознательность и необидчивость - реально очень ценные качества! Это не сарказм.
Чтобы понимать то, что имеют ввиду профессионалы нужен практический опыт. Так что пока не забивай себе голову понятием “говнокод”. Считай это просто не очевидным кодом с большими возможностями “наступить на грабли”.
Видя твою заинтересованность в предмете, я бы посоветовал тебе подтянуть теорию именно алгоритмов. В западных учебника есть такое понятие “гуд практис (good practice)” это примеры для подражания при решении типовых задач.
Например в этой теме, если у тебя есть маска в 32 бита, которая логически разделена на байты, то “гуд практис” - оперировать с байтами, а не с 32 битным представлением.
не понял немного…
маску использовал для того , чтоб поменять конкретный байт… У меня есть 4 байта , связаны общим признаком , но менять нужно один из байтов.
примерно так…
uint32_t t[350];
-------
int s=210; // temperature 0-210
t[0]= (t[0] & 0x00ffffff) | ((uint32_t)s<<24);
-------
int p=55; // percentage 1-100
t[0]= (t[0] & 0xffff00ff) | ((int)p<<8);