Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Преобразования типа при выполнении бинарных операторов




Бинарные операторы

Перейдем к рассмотрению бинарных арифметических операторов. Операторы “+” (сложить), “-” (вычесть), “*” (умножить) имеют обычный арифметический смысл. При использовании бинарных операторов в языке Си допускается использование операндов, имеющих разные арифметические типы. При этом компилятор выполняет автоматическое преобразование типа. Следует учитывать особенность, имеющую место в языке Си, при выполнении операции деления (оператор /) для данных целого типа. Результат выполнения операции деления в этом случае имеет целый тип. Стандарт языка Си строго определяет эту операцию только для случая, когда оба операнда положительны. В этом случае дробная часть отбрасывается. В том случае, когда только один операнд отрицателен, результат зависит от реализации. Приведем пример. Рассмотрим результаты выполнения следующего вызова функции printf()

printf(“23 / 4 = %d -23 / 4= %d\n”, 23 / 4, -23 / 4);

При выполнении программы, содержащий этот вызов функции, в среде Builder v. 6 был получены следующие результаты:

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

Отметим, что при выполнении в другой среде при вычислении выражения -23 / 4 может быть получено число -6.

Бинарный оператор “%” выполняет вычисление остатка от деления левого операнда на правый операнд. Каждый из операндов может иметь любой целочисленный тип. Результат выполнения рассматриваемого оператора, если один из операторов отрицателен, зависит от реализации.

Бинарные операторы “ – ” и “+” имеют одинаковый приоритет, который ниже приоритета операторов “*”, “/” и “%”. Приоритет унарных операторов выше приоритета бинарных операторов. Унарные операторы имеют правую ассоциативность, а бинарные операнды – левую ассоциативность.

Вычислять значение выражения можно только в том случае, если его операнды имеют одинаковые типы. Компилятор сильно типизированного языка должен “отказываться” обрабатывать выражения, операнды которых имеют разные типы. Однако такой подход не всегда является оправданным. Дело в том, что существуют близкие по своему назначению типы. К таким, например, типам относятся арифметические типы. В распоряжение программиста язык Си предоставляет большое количество разновидностей арифметических типов. Представляется целесообразным допускать использование некоторых категорий смешанных выражений, операнды которых имели бы разные, но близкие по своему назначению типы. Такой подход реализован в языке Си.

В языке Си предусмотрена возможность выполнения преобразования типов при вычислении смешанных арифметических выражений. Назначение преобразования типа состоит в том, чтобы привести операнды к одному общему типу. Язык предусматривает две разновидности преобразования типов;

● Неявное (автоматическое).

● Явное.

Остановимся вначале на автоматическом преобразовании типов.




Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 334; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.