Главная Контакты


  На сайте

  Java, JavaScript
  Документация Perl
  Документация PHP
  Документация ASP
  Новости сайта
  Flash
  Интернет протоколы
  Apache
  Уроки программирования
  Язык программирования C
 


Типы, операторы и выражения


Реляционные выражения вроде i> j и логические выражения, соединенные & & или | | имеют по определению значения 1, если истинные и 0, если ложны. Таким образом, присвоение вроде
d = c> = '0 '& & c <= '9'
установит d к 1, если c является цифрой и 0 - если нет. Однако, такие функции, как isdigit, могут вернуть любое ненулевое значение в случае истины. "Истина" в тестовой части if, while, for и т.д. означает просто "ненулевое значение", поэтому это не играет особой роли.


Неявные арифметические преобразования работают как и ожидается. В общем, если оператор, такой как + или *, имеет два операнда (то есть это бинарный оператор) отличных типов, "низший" тип сводится к "высшему" до того как совершить сделку. В Разделе 6 Приложения А точно описаны правила преобразований. Если отсутствуют беззнаковые операнды, следующего набора правил вполне хватит:
Если тип какого из операндов равен long double (длинном двойном), другой также будет сведено к long double.
Иначе, если ты какого из операндов равен double (двойной), другой также будет преобразован в double.
Иначе, если тип какого из операндов равен float (число с плавающей точкой), другой также будет преобразован в float.
Иначе, превратить char (знаковое) и short (короткое) на int (целое).
Если же ты какого из операндов равен long (длинном), другой также будет преобразован в long.

Обратите внимание, float в выражениях не превращаются автоматически на double; это отличается от оригинального определения. В общем, математические функции, как те из , использовать двойную точность. Основной причиной использования float является сохранение памяти в случае больших массивов или, реже, сохранение времени на машинах, где арифметика с двойной точностью - особенно ресурсоемких.

Правила преобразований усложняются, когда задействованы беззнаковые операнды. Проблема заключается в том, что сравнение между знаковыми и беззнаковыми значениями зависят от машины, поскольку они полагаются на размеры различных типов целых. Для примера, скажем, что int равен 16-и битам, а long - тридцать второй битам. В таком случае,-1L <1U, поскольку 1U, которое является беззнаковых целым (unsigned int) сведено к знакового длинного (signed long). Но-1L> 1UL, поскольку-1L сведено к беззнакового длинного (unsigned long) и, таким образом, кажется большим положительным числом.

Преобразование имеют место также при присвоений; значение с правой стороны сводится к типу левого, что и будет типом результата.

Символ превращается в целое или путем придания знака, или нет, как будет описано ниже.

Другие статьи по теме:

- Внешние переменные и область действия
- Символьные массивы
- Типы, операторы и выражения
- Функции и структура программ
- Введение в c++


Голосование:
Чего Вы хотели бы видеть больше на сайте?

Статей, документации
Скриптов
Программ для вебмастера
Я не знаю



Другие голосования

Обмен кнопочками:



Приглашаем Вас обменяться кнопочками! Обращайтесь к администратору.


Новые статьи:


Наши партнеры:





2006-2024 © SMTI.RU
Главная страница | Связаться с нами