|
Типы, операторы и выраженияДлинные целые превращаются в короткие или char путем отбрасывания лишних битов старшего разряда. Таким образом, при int i; char c; i = c; c = i; значение c останется неизменным. Это будет оставаться истиной, независимо от того, используется знаковое расширение. Однако, при противоположном направлении присвоения, возможна потеря информации. Если x является типа float, а i является int, тогда x = i и i = x, оба, приводят к превращению; обращения float на int приводит к отказу дробной части. Когда double (двойная) превращена в float (число с плавающей точкой), округление или отбрасывание дробной части зависит от реализации. Поскольку аргумент вызова функции также является выражением, преобразование типов так же может иметь место при передаче аргументов функциям. При отсутствии прототипов функций, char и short становятся int, а float станет double. Именно поэтому мы объявили аргументы функции как int и double, даже если функцию вызвано с char и float. И, наконец, можно заставить явные преобразования в любом выражении с помощью унарный оператор возведения. В конструкции вроде (Название типа) выражение выражение будет преобразовано в указанный типа, согласно правилам преобразования, приведенных выше. Само понятие сведения можно сравнить с тем, будто выражение было присвоено переменной указанного типа, которая затем используется вместо целой конструкции. Так, скажем, функция библиотеки sqrt ожидает аргумента типа double (двойной) и выдаст ерунду, если нечаянно передать то другое. (Sqrt объявлен в sqrt ((double) n) для преобразования значения n на тип double перед тем как передать его sqrt. Заметим, что данной сводки просто выдает значение соответствующего типа, сама n останется неизменной. Оператор возведения имеет такой же высокий приоритет как и остальные унарных операторов, как будет указано в таблице в конце этого раздела. Если аргументы объявлено через прототип функции, что и должно происходить при обычных обстоятельствах, объявления повлечет автоматического сведения любых аргументов при вызове функции. Таким образом, имея прототип функции srqt double sqrt (double) вызов root2 = sqrt (2) сводит целое 2 в двойном 2.0 без необходимости явного возведения. Стандартная библиотека включает портабельне воплощение генератора псевдослучайных чисел и функцию для инициализации зерна, первое иллюстрирует сведения: unsigned long int next = 1; / * Rand: возвращает псевдослучайное целое в пределах 0 .. 32767 * / int rand (void) { next = next * 1103515245 + 12345; return (unsigned int) (next/65536)% 32768; } / * Srand: устанавливает зерно для rand () * / void srand (unsigned int seed) { next = seed; } Упражнение 2-3. Напишите функцию htoi (s), которая бы обращала цепочку из шестнадцатеричных цифр (включая возможный 0x или 0X) на соответствующее целое значение (int). Разрешенными цифрами являются 0 до 9, a к f или A до F. Продолжение статьи: ч.1 Продолжение статьи: ч.2 Продолжение статьи: ч.3 Продолжение статьи: ч.4 Продолжение статьи: ч.5 Продолжение статьи: ч.6 Продолжение статьи: ч.7 Продолжение статьи: ч.8 Продолжение статьи: ч.9 Продолжение статьи: ч.10 Продолжение статьи: ч.11 Продолжение статьи: ч.12 Продолжение статьи: ч.13 Продолжение статьи: ч.14 Продолжение статьи: ч.15 Продолжение статьи: ч.16 Продолжение статьи: ч.17 Продолжение статьи: ч.18 Продолжение статьи: ч.19 Другие статьи по теме: - Символьные массивы- Функции и структура программ - Введение в c++ - Внешние переменные и область действия - Типы, операторы и выражения |
|
2006-2024 © SMTI.RU Главная страница | Связаться с нами |