logo
volkov / C++ / Бьерн Страуструп-Справочное руководство по С++

R.4.4 Целочисленные и числа с плавающей точкой

Преобразование значения с плавающей точкой к целочисленному типу

сводится к "усечению", т.е. отбрасыванию дробной части. Такие

преобразования зависят от машины, в частности в какую сторону будет

проходить усечение для отрицательных чисел определяется на разных

машинах по разному. Результат считается неопределенным, если

значение нельзя представить в целочисленном типе.

Преобразования целочисленных значений к значениям с плавающей

точкой математически корректны настолько, насколько это позволяет

система команд. Может произойти потеря точности, если целочисленное

значение нельзя точно представить как значение с плавающей точкой.

R.4.5 Арифметические преобразования

Для большинства операций преобразования операндов и тип результата

определяются одними и и теми же правилами. Это правило можно назвать

"обычными арифметическими преобразованиями".

Если один из операндов есть long double, другой операнд

преобразуется в long double.

Иначе, если один из операндов есть double, другой операнд

преобразуется в double.

Иначе, если один из операндов есть float, другой операнд

преобразуется в float.

Иначе, если стандартные целочисленные преобразования ($$R.4.1)

происходят над обоими операндами.

Тогда, если один из операндов есть unsigned long, другой

операнд преобразуется в unsigned long.

Иначе, если один из операндов есть long int, а другой -

unsigned int, то при условии, что long int может представлять

все возможные значения unsigned int, значение unsigned int

преобразуется в long int, в противном случае оба операнда

преобразуются в unsigned long int.

Иначе, если один из операндов есть long, другой операнд

преобразуется в long.

Иначе, если один из операндов есть unsigned, другой операнд

преобразуется в unsigned.

Иначе, оба операнда должны быть int.