С++ для начинающих




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


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

  • типы всегда приводятся к тому из типов, который способен обеспечить наибольший диапазон значений при наибольшей точности. Это помогает уменьшить потери точности при преобразовании;
  • любое арифметическое выражение, включающее в себя целые операнды типов, меньших чем int, перед вычислением всегда преобразует их в int.
  • Мы рассмотрим иерархию правил преобразований, начиная с наибольшего типа long double.

    Если один из операндов имеет тип long double, второй приводится к этому же типу в любом случае. Например, в следующем выражении символьная константа 'a' трансформируется в long double (значение 97 для представления ASCII) и затем прибавляется к литералу того же типа: 3.14159L + 'a'.

    Если в выражении нет операндов long double, но есть операнд double, все преобразуется к этому типу. Например:

    int    iva1;

    float fval;

    double dval;

    // fva1 и iva1 преобразуются к double перед сложением

    dval + fva1 + ival;

    В том случае, если нет операндов типа double и long double, но есть операнд float, тип остальных операндов меняется на float:

    char cvat;

    int iva1;

    float fva1;

    // iva1 и cval преобразуются к float перед сложением

    cvat + fva1 + iva1;

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

    При приведении к целому типы char, signed char, unsigned char и short int преобразуются в int. Тип unsigned short int трансформируется в int, если этот тип достаточен для представления всего диапазона значений unsigned short int (обычно это происходит в системах, отводящих полслова под short и целое слово под int), в противном случае unsigned short int заменяется на unsigned int.

    Тип wchar_t и перечисления приводятся к наименьшему целому типу, способному представить все их значения. Например, в перечислении




    Содержание  Назад  Вперед