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


  На сайте

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


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


Длинные целые превращаются в короткие или 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 объявлен в ) Поэтому, если n является целым, мы можем использовать
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.

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

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


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

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



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

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



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


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


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





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