|
Типы, операторы и выраженияПриоритет & & является большим | |, но оба уступают релятивным операторам и операторам равенства, поэтому выражения вроде i (C = getchar ())! = '\ N' для того, чтобы добиться желаемого результата - сначала, присвоение значения c, а затем, сравнение его с '\ n'. По определению, номер релятивного или логического выражения равно 1, если соотношение истинно, и 0 - если ложно. Унарный оператор отрицания! превращает ненулевой операнд на 0 (ноль) и, наоборот, нулевой операнд на 1 (единицу). Распространенным является применением! в конструкциях вроде if (! valid) вместо if (valid == 0) Трудно обобщить, какая из этих форм является лучшей. Конструкции вроде! Valid легко читаются ("if not valid" - "если не действительное"), но сложные выражения бывает трудно понять. Упражнение 2-2. Напишите цикл, эквивалентный приведенному выше, но без использования & & или | |. Преобразование типов Когда какой оператор имеет операнды разных типов, последние превращаются в общий типа, согласно небольшого набора правил. В общем, автоматическими преобразованиями считаются те, которые вращают "узкий" операнд на "широкий" без потери информации, как, например, при преобразовании целого в число с плавающей точкой в выражении вроде f + i (где i содержит целое, af - число с подвижной точкой). Выражения, которые не имеют смысла, как скажем использования числа типа float в качестве индекса, запрещены. Выражения, в которых возможно потерять информацию, как в случае присвоения длинного типа целого коротком, или присвоение числа с плавающей точкой целом, могут вызвать предупреждение, но не запрещаются. Тип char - это просто маленькое целое, поэтому этот тип может свободно употребляться в арифметических операциях. Это обеспечивает существенной гибкостью в некоторых случаях преобразования символов. Примером может служить упрощенная этим наивным воплощением, функция atoi, вращающего цепочка цифр в их числовой эквивалент. / * Atoi: превращает s на целое * / int atoi (char s []) { int i, n; n = 0; for (i = 0; s [i]> = '0 '& & s [i] <= '9'; + + i) n = 10 * n + (s [i] - '0 '); return n; } Как мы уже упоминали это в Разделе 1, выражение s [i] - '0 ' возвращает числовое значение символа, которое сохраняется в s [i], поскольку значение '0 ', '1' и т.д., образуют непрерывную возрастающую последовательность. Продолжение статьи: ч.1 Продолжение статьи: ч.2 Продолжение статьи: ч.3 Продолжение статьи: ч.4 Продолжение статьи: ч.5 Продолжение статьи: ч.6 Продолжение статьи: ч.7 Продолжение статьи: ч.8 Продолжение статьи: ч.9 Продолжение статьи: ч.10 Продолжение статьи: ч.11 Продолжение статьи: ч.12 Продолжение статьи: ч.13 Продолжение статьи: ч.14 Продолжение статьи: ч.15 Продолжение статьи: ч.16 Продолжение статьи: ч.17 Продолжение статьи: ч.18 Продолжение статьи: ч.19 Другие статьи по теме: - Внешние переменные и область действия- Символьные массивы - Типы, операторы и выражения - Функции и структура программ - Введение в c++ |
|
2006-2024 © SMTI.RU Главная страница | Связаться с нами |