Преобразование типов данных

   
На этом шаге мы рассмотрим способы и особенности преобразования типов данных.

   
Современные компиляторы многое берут на себя, а неопытный программист этого не замечает и потому должным образом не может оценить происходящее. Но все же надо иметь представление о
преобразованиях типов данных, потому что тот же неопытный программист часто заходит в тупик в очевидных ситуациях и недоуменно разводит руками: "Чего это оно не идет? Не понимаю...".
А не понимает, потому что избалован возможностями современных компиляторов, при которых он родился и вырос. Но они его (если программист не очень грамотный) иногда подводят, и бывает
очень сильно.

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

   Примечание.
Преобразования осуществляются для тех типов данных, для которых это имеет смысл.

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

  • типы int и char могут свободно смешиваться в арифметических выражениях, т. к. перед вычислением переменная типа char автоматически преобразуется в int
    (конечно, если оба типа относятся к числу). Поэтому когда мы видим, что символ может быть отрицательным числом (например, -1), то его лучше помещать в переменную, объявленную как int;
  • к каждой арифметической операции применяются следующие правила: низший тип всегда преобразуется в высший: short в int, float в double,
    int в long и т.д.;
  • при присвоении тип значения правой части всегда преобразуется в тип левой части. Отсюда надо учитывать, что:
    • если переменная, расположенная справа от знака присвоения, имеет тип float, а переменная, расположенная слева - int, то произойдет преобразование в тип int, и
      дробная часть значения переменной типа float будет отброшена;
    • если справа расположена переменная типа double, а слева переменная типа float, то произойдет преобразование в тип float с округлением;
    • если справа расположена переменная типа long, а слева переменная типа int, то произойдет преобразование в тип int, при этом у значения переменной справа будут отброшены
      старшие биты (вот здесь может возникнуть погрешность!);
  • любое выражение может быть приведено к желаемому типу не автоматически при преобразованиях, а принудительно с помощью конструкции: (имя типа) выражение. Пример:
      double x = 2.5;
      int z = (int) x; // можно также записать: z = int (x)
    

   
На следующем шаге мы рассмотрим побитовые логические операции.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий