Pavel » 05 ноя 2013, 14:52
"В правилах приведения типов говорится о том, что при присвоении значения длинной переменной короткой, у длинной переменной младшие биты отбрасываются и короткой переменной присваиваются старшие биты."
Это правило, как говорится, на все случаи жизни, но люди создающие компиляторы выбирают простой путь, так как память МК не позволяет разгуляться на переменных. Пример на C и на ассемблере (как переводит компилятор с C в ассемблер).
a=2000.
b=a.
MOVLW 208
MOVWF _a+0
MOVLW 7
MOVWF _a+1
MOVLW 208
MOVWF _b+0
Что касается вашего примера, то тут есть два случая:
1) Если переменной char присвоено значение (в вашем случае 30) то строчки x=(int)c*10 и x=c*10 будут иметь одинаковое количество команд на ассемблере, то есть компилятор сам все подсчитает и упростит.
2) Если переменной char не присвоено значение, то строчка x=(int)c*10 будет занимать больше команд на ассемблере, чем строчка x=c*10, так как грамотно написанный компилятор подсчитает все возможные варианты и выделит памяти по максимуму.
Я эти примеры привел к тому, что компилятор для МК не есть компилятор для ПК, так как количество команд для компиляторов для ПК и МК разное.