|
Типы, операторы и выраженияРеляционные выражения вроде 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; это отличается от оригинального определения. В общем, математические функции, как те из Правила преобразований усложняются, когда задействованы беззнаковые операнды. Проблема заключается в том, что сравнение между знаковыми и беззнаковыми значениями зависят от машины, поскольку они полагаются на размеры различных типов целых. Для примера, скажем, что int равен 16-и битам, а long - тридцать второй битам. В таком случае,-1L <1U, поскольку 1U, которое является беззнаковых целым (unsigned int) сведено к знакового длинного (signed long). Но-1L> 1UL, поскольку-1L сведено к беззнакового длинного (unsigned long) и, таким образом, кажется большим положительным числом. Преобразование имеют место также при присвоений; значение с правой стороны сводится к типу левого, что и будет типом результата. Символ превращается в целое или путем придания знака, или нет, как будет описано ниже. Продолжение статьи: ч.1 Продолжение статьи: ч.2 Продолжение статьи: ч.3 Продолжение статьи: ч.4 Продолжение статьи: ч.5 Продолжение статьи: ч.6 Продолжение статьи: ч.7 Продолжение статьи: ч.8 Продолжение статьи: ч.9 Продолжение статьи: ч.10 Продолжение статьи: ч.11 Продолжение статьи: ч.12 Продолжение статьи: ч.13 Продолжение статьи: ч.14 Продолжение статьи: ч.15 Продолжение статьи: ч.16 Продолжение статьи: ч.17 Продолжение статьи: ч.18 Продолжение статьи: ч.19 Другие статьи по теме: - Внешние переменные и область действия- Символьные массивы - Типы, операторы и выражения - Функции и структура программ - Введение в c++ |
|
2006-2024 © SMTI.RU Главная страница | Связаться с нами |