Книга: Язык Си - руководство для начинающих
ПРЕОБРАЗОВАНИЕ ТИПОВ
В операторах и выражениях, вообще говоря, должны использоваться переменные и константы только одного типа. Если все же вы смешаете типы в одном выражении, то компилятор с языка Си не считает программу неправильной, как это произошло бы при программировании на Паскале. Вместо этого компилятор использует набор правил для автоматического преобразования типов. Это очень удобно, но может оказаться и опасным, особенно если вы допустили смешение типов нечаянно. (Например, программа lint, работающая в операционной системе UNIX, проверяет несоответствие типов.) Нам представляется разумным привести несколько основных правил, касающихся преобразования типов:
1. Если операция выполняется над данными двух различных типов, обе величины приводятся к "высшему" из двух типов. Этот процесс называется "повышением" типа.
2. Последовательность имен типов, упорядоченных от "высшего" к "низшему", выглядит так: double, float, long, int, short и char. Применение ключевого слова unsigned повышает ранг соответствующего типа данных со знаком.
3. В операторе присваивания конечный результат вычисления выражения в правой части приводится к типу переменной, которой должно быть присвоено это значение. Данный процесс может привести к "повышению" типа, как описано выше, или к "понижению, при котором величина приводится к типу данных, имеющему более низкий приоритет.
Повышение" типа обычно происходит гладко, в то время как понижение" может привести к затруднениям. Причина этого проста: все число целиком может не поместиться в элементе данных низшего типа. Переменная типа char может иметь целое значение 101, но не 22334. Пример, приведенный ниже, иллюстрирует применение этих правил.
/* Преобразования*/
main()
{
char ch;
int i;
float fl;
fl = i = ch = 'А'; /* строка8 */
printf(" ch = %c, i = %d, fl = %2.2fn", ch, i, fl);
ch = ch + 1; /* строка10 */
i = fl + 2*ch; /* строка11 */
fl = 2.0*ch + 1; /* строка12*/
printf(" ch = %c, i = %d, fl = %2.2fn", ch, i, fl);ch = 2.0e30; /* строка 14 */
printf(" Теперь ch = %с n" , ch);
}
Выполнив программу "преобразования", получим следующие результаты:
ch =A, i = 65, fl = 65.00
ch =B, i = 197, fl = 329.00
Теперь ch =
- Преобразование XML в реляционную базу данных
- Преобразование строки в целое: stoi( )
- 7. Лекция: Преобразование типов
- Преобразование кодировок
- Преобразование WSDL-кода в программный код агента для клиента
- Преобразование в XSL-FO при помощи таблицы стилей XSLT
- Пример 12-44. Преобразование метров в мили
- Преобразование типов даты в CHAR(n) и VARCHAR(n)
- 7.12. Отображение структур и преобразование деревьев
- 9.7. Преобразование обычных адресов в данные широты и долготы
- 6.1.4. Преобразование разложенного времени в time_t
- Преобразование типов данных