мета-данные страницы
  •  

Это старая версия документа!


операторы

Арифметические операторы

Бинарными1) арифметическими операторами являются +, -, *, /, а также оператор деления по модулю %. Деление целых сопровождается отбрасыванием дробной части, какой бы она ни была.

Оператор % к операндам типов float и double не применяется. В какую сторону (в сторону увеличения или уменьшения числа) будет усечена дробная часть при выполнении / и каким будет знак результата операции % с отрицательными операндами, зависит от машины.

Операторы отношения и логические операторы

Операторами отношения являются:

  • > - больше
  • >= - больше или равно
  • < - меньше
  • - меньше или равно

Операторы сравнения на равенство:

  • == - равно
  • != - не равно

Логические операторы:

  • && - или
  • || - и
Выражения, между которыми стоят операторы && или ||, вычисляются слева направо. Вычисление прекращается, как только становится известна истинность или ложность результата

Унарный оператор:

  • ! - не

Преобразования типов

В ряде случаев преобразования сопровождаются потерей информации, например, когда числа большей разрядности (скажем размером 4 байт) получаем число меньшей разрядности (например, в 2 байта). Без потери информации проходят следующие цепочки преобразований:

  • char → short → int → long
  • unsigned char → unsigned short → unsigned int → unsigned long
  • float → double → long double

пример потери данных

Неявное преобразование

Преобразования, применяемые компилятором при арифметических операциях:

  1. Если один из операндов имеет тип long double, то второй операнд тоже будет преобразован в тип long double
  2. Если предыдущий пункт не выполняется и если один из операндов имеет тип double, то второй операнд тоже будет преобразован к типу double
  3. Если предыдущий пункт не выполняется и если один из операндов имеет тип float, то второй операнд тоже будет преобразован к типу float
  4. Если предыдущий пункт не выполняется и если один из операндов имеет тип unsigned long int, то второй операнд тоже будет преобразован к типу unsigned long int
  5. Если предыдущий пункт не выполняется и если один из операндов имеет тип long, то второй операнд тоже будет преобразован к типу long
  6. Если предыдущий пункт не выполняется и если один из операндов имеет тип unsigned, то второй операнд тоже будет преобразован к типу unsigned
  7. Если предыдущий пункт не выполняется то оба операнда приводятся к типу int

Явное преобразование

Явное преобразование происходит через операторы преобразования:

int a = 10;
int b = 4;
int c = a / b;
double d = a / b;
double e = (double)a / (double)b;
printf("c = %d \n", c); // 2
printf("d = %f \n", d); // 2.00000
printf("e = %f \n", e); // 2.50000
 
int number = 70;
char symbol = (char) number;
printf("symbol = %c \n", symbol); //  F
printf("symbol (int code) = %d \n", symbol); // 70
1)
т.е. с двумя операндами