Похоже, что компилятор просматривает не отдельные инструкции, а целые фрагменты текста. Об этом говорит вспыхивающие то там то тут топики, про то что изменил порядок следования операндов или ещё что-нибудь не существенное с точки зрения алгоритма, а результирующий код увеличился либо уменьшился весьма существенно. А рекомендаций по данному вопросу нет. Да и как их дашь если это зависит от компилятора и даже от его версии. Тем не менее наверняка каждый выработал для себя такие "оптимальные конструкции". Естественно, что каждый раз не будешь их проверять, но всё же. И вот у меня два вопроса.
1) Имеется переменная 32 бита (X) и 4 байта (b0-b3). Мне необходимо занести значение b0-b3 в X. На первый взгляд напрашивается две конструкции. Хотя может я и не угадал ни разу.
а)
X=b0;
X+=(uint32_t)b1<<8; // Или '|='
X+=(uint32_t)b2<<16;
X+=(uint32_t)b3<<24;
б)
X=b0;
X+=b1*0x100;
X+=b2*0x10000;
X+=b3*0x1000000;
2) Необходимо байт 0 многобитной переменной X занести в байт b.
При конструкции
b=X; // Компилятор выдаёт предупреждение, но выполняет правильно
Если использовать
b=X & 0xff; // То компилятор не ругается.
А как записать эффективней.