Некоторые операции в зависимости от своих операндов могут вызвать преобразование значения операнда от одного типа к другому.
Стандартные преобразования для целочисленных
Всюду, где требуется целое, можно использовать char, short, причем в знаковом и беззнаковом вариантах. Если int может представлять все значения исходного типа, значение преобразуется к int, иначе оно преобразуется к unsigned int. Это называется стандартным преобразованием для целочисленных.
Целочисленные и числа с плавающей точкой
Преобразование значения с плавающей точкой к целочисленному типу сводится к «усечению», т.е. отбрасыванию дробной части. Результат считается неопределенным, если значение нельзя представить в целочисленном типе.
Преобразования целочисленных значений к значениям с плавающей точкой математически корректны настолько, насколько это позволяет система команд. Может произойти потеря точности, если целочисленное значение нельзя точно представить как значение с плавающей точкой.
Строки и арифметические типы
Преобразование значение любого арифметического типа к строке даёт в результате строковое представление числа.
Преобразование строки к арифметическому типу сводится к попытке интерпретировать значение строки как представление числа. В случае неудачи возникает ошибка времени выполнения.
Строки и массивы символов
Строка преобразуется в массив символов, завершающийся символом '\0'.
Массив символов преобразуется к строке.
Для большинства операций преобразования операндов и тип результата определяются одними и теми же правилами. Это правило можно назвать «обычными арифметическими преобразованиями».
Если оба операнда строки либо массивы символов, оба операнда преобразуются в string.
Если один из операндов есть double либо float, оба операнда преобразуется в double.
Тогда, если один из операндов есть беззнаковое целое (unsigned long или unsigned int), оба операнда преобразуется в unsigned int.
Иначе, оба операнда преобразуются в int.