бинарни оператори

Ние сега разгледаме двоични аритметични оператори. "+" оператори (установяват), "-" (изваждане), "*" (множествена) имат обичайната аритметично значение. При използване на бинарни оператори в C езикови допускат операнди с различни аритметични типове. В този случай, компилаторът извършва автоматично преобразуване тип. Трябва да се оцени особеност на които се провеждат в езика на С, при извършване на операция деление (оператор /) за цяло число тип данни. В резултат на операцията по разделянето в този случай има тип. С език стандарт строго определя тази операция, само когато и двата операнда са положителни. В този случай, дробна част се изхвърля. В случаите, когато само един операнд е отрицателно, резултатът зависи от изпълнението. Ето един пример. Помислете за следващите резултатите от ФОРМАТ () функцията прави

ФОРМАТ ( "23/4 = 23. / 4 = \ н.", 23/4, -23/4);

Когато стартирате програма, която съдържа параметър на функцията в Builderv среда. 6, бяха получени следните резултати:

23/4 = 5 -23 / 4 = - 5.

Имайте предвид, че когато се извършва в различна среда, когато се оценява израз -23/4 -6 може да се получи номер.

Binary оператор "%" извършва изчисляването на останалата част от разделението на левия операнд от десния операнд. Всеки един от операндите могат да бъдат от всякакъв тип цяло число. Резултатът от въпросния оператор, ако един от операторите е отрицателна, зависи от изпълнението.

Binary оператори "-" и "+" имат един и същ приоритет, който е по-нисък от приоритета на операторите "*", "/" и "%". Едноместно оператори по-висок приоритет бинарни оператори. Едноместно оператори са с десен асоциативен и бинарни операнди - оставени асоциативност.

Вид конверсия при извършване на бинарни оператори

Езикът на C е в състояние да изпълнява отливки при изчисляването на смесени аритметични изрази. тип Назначаване преобразуване е да се съберат операнди на общ тип. Език предвижда два вида вариации на преобразуване;

Помислете първо преобразувания автоматичен тип.

Автоматично вид реализация

Правила за изпълнение на реализации автоматични тип са такива, че обикновено не води до загуба на информация. Факт е, че когато се използва с по-малки операнди се превръща варира стойности операнди с голям диапазон от стойности, като превръщането на цяло число в реално число в израза 2 + 5,3.

В основата на тази класификация постави размера на паметта, заета от данните.

Кратки типове включват следните видове:

За всички видове кратко операция първоначално извършва при вида на трансформации, който се нарича интегрална промоция във всички видове кратко се превръща в инт. За това правило, има повече яснота. Tipunsigned кратко се превръща в едно цяло число, само когато този тип (инт) е достатъчно, за да представят пълната гама от tipaunsigned кратки стойности (обикновено се случва в тези системи, при представянето на данните tipashort разпределят половината компютърна текстообработка и пълен дума - за вида на данните Int). В последния случай tipunsigned кратко се превръща в неподписан Int. Помислете кода от картинката по-долу:

Int основни (свободен) кратко п = 5; овъгляване СН = "A"; ФОРМАТ ( "п + CH = sizeof (п + СН) = \ н.", п + СН, sizeof (п + СН)); getch (); връщане 0;>

В функцията повикване ФОРМАТ () се изчислява експресия стойност п + СН и памет размер, който обхваща резултат на изчисление на стойността. Когато стартирате тази програма в Builder среда ст. 6 на екрана на дисплея следния резултат на е получено:

п + CH = 70 sizeof (п + СН) = 4

Стойността на променливата СН, превръща тип Int. е равен на 65. Добавянето на този номер със стойността на индексът п и дава като резултат от изчисляването на изразяване н + гл номер 70. В заключителната част на изхода (sizeof (н + СН) = 4) може да се разглежда като доказателство за принципа, че изчисление всъщност извършва на операнди , превръща tipuint.

При конвертиране дълго тип използван принцип класиране. С всяка от тези видове се свързва неговия ранг. Класираха поредица от дълго тип, тъй като видът с най-висок ранг е както следва:

● неподписан дълго дълго,

Когато се използва в израз операнди, които имат различни степени, вида на операнд, с по-нисък ранг, е настроен на типа на операнд, с по-висок ранг. Например, ако експресията има един операнд двойно тип. а вторият -long. вида на втория операнд трябва да бъде превърнато в tipudouble.

От това правило има едно изключение. Ако един операнд има въведете дълго. а вторият -unsigned. при което не всички znacheniyaunsigned междинно съединение може да бъде представена tipomlong. След това двете операнди се превръщат в tipuunsigned дълго.