QUOTE (Lebets_VI @ May 27 2012, 22:29)

в строке: reportBuffer.dx = d = DIVIDE_BY_64(cosinus);
происходит сразу 2 присваивания: переменным "reportBuffer.dx" и "d" присваивается значение DIVIDE_BY_64(cosinus). И в какой последовательности они присваиваются, знает только компилятор

,
Неправильно. Порядок занесения значений очень даже четко определен. В этом выражении используются два выражения "оператор присваивания" и результат первого (d = DIVIDE_BY_64(cosinus)) является аргументом второго (reportBuffer.dx =). Причем то, что в результате этих выражений в d и reportBuffer.dx оказываются новые значения - всего лишь побочный эффект выражения "оператор присваивания".
QUOTE (ветерок @ May 27 2012, 22:50)

странно для чего присваивать 7 и сдвигать на 6 бит,если можно было сразу присвоить результирующее значение
Потому что тут используется арифметика с фиксированной точкой, значения имеют 6 битов после запятой. И в данном случае в переменную заносится число 7.0, что сразу видно из такой записи исходника. Если бы там было, как вы предлагаете, написано число 448 - то много народу сломало бы голову, пытаясь ответить на ваш вопрос "что за магическое число 448 тут стоит"?