Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Справочник по С++.doc
Скачиваний:
49
Добавлен:
02.05.2014
Размер:
995.33 Кб
Скачать

R.4.1 Стандартные преобразования для целочисленных

Всюду, где требуется целое, можно использовать char, short int, элемент перечисления ($$R.7.2) или битовое поле ($$R.9.6), причем в знаковом и беззнаковом вариантах. Если int может представлять все значения исходного типа, значение преобразуется к int, иначе оно преобразуется к unsigned int. Это называется стандартным преобразованием для целочисленных.

R.4.2 Преобразования целочисленных

Если целое преобразуется в беззнаковый тип, то полученное значение есть наименьшее беззнаковое целое, совпадающее с целым со знаком по (mod 2**n), где n есть число битов в представлении беззнакового целого. Для представления в дополнительном коде это преобразование лишь концептуальное, никаких изменений в двоичном представлении в действительности не происходит.\ Если целое преобразуется к знаковому типу, значение не меняется, при условии, что его можно представить с помощью нового типа, иначе значение определяется реализацией.

R.4.3 Значения с плавающей точкой и двойной точностью

Для выражений типа float может использоваться арифметика с обычной точностью. Если значение с плавающей точкой меньшей точности преобразуется в значение типа float равной или большей точности, то изменения значения не происходит. Если значение с плавающей точкой большей точности преобразуется в значение типа float меньшей точности и значение находится в пределах, задаваемых представлением типа, то в результате может получиться или ближайшее большее или ближайшее меньшее представимое значение. Если результат оказался вне границ представления типа, поведение неопределено.

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.