|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 10:58 pm
| Автор |
Съобщение |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Това че се каства според променливата го осъзнах.
Но интересно как стои въпроса когато такъв израз е част от друг.
Нещо не намирам в стандарта специфирано как трябва да постъпи компилатора. Или не гледам добре.
|
| Вто Апр 10, 2007 11:36 am |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
тц.. що карате един хардуерист да ви обяснява софтуер...
Има два подхода, по-простичкият е:
1) гледаш параметрите и решаваш каква ще е типът на операцията. Ако единия от операторите е със знак, значи и операцията ще е със знак, а размерът се определя от по-големия параметър. Примерно ако единия операнд е unsigned char, а другия signed long, то операцията ще е умножение със знак и размер long.
2) Ако единия операнд не съответства на типа на операцията, то може той да се преобразува по тип преди операцията. В горния пример unsigned char параметъра може да се преобразува до положителен long.
3) Типът на резултата се определя от типа на операцията. В общия случай съответстват, но не е задължително. Примерно някои процесори/компилатори могат при умножение на byte да получат int (т.е. без препълване).
4) Като се получи резултата с неговия тип се ползва за последващата операция - независимо дали е присвояване, следващо умножение/деление и т.н. Принципно няма разлика между присвояване и друга математическа операция.
Пак по принцип компилаторите "не мислят". Ако трябва да се направи първо умножение и после присвояване, те щи си направят умножението според типа на операндите и ако се налага след това резултата ще го кастнат според присвояването...
В много редки случаи и при много високи нива на оптимазаци, един достатъчно "умен" компилатор може да се сети, че ако в крайна сметка резултата ще се присвоява на байт а преди това събира long може да изреже long-те преди събирането.
А другият подход е опрерациите да си се разглеждат като overloaded функции - но пак се стига до същите резултати...
|
| Вто Апр 10, 2007 12:50 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 2 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|