Программирование на JAVA
Меню :
Стартовая
Основы программирования
Программирование на JAVA
Программирование на C++
Программирование на Pascal
Задачи по программированию
Здесь результат сложения будет уже типа long. Точно так же некорректна такая инициализация:
// пример вызовет ошибку компиляции byte b=5; byte с=-5;
Даже унарный оператор "-" проводит вычисления с точностью не меньше 32 бит.
Хотя во всех случаях инициализация переменных приводилась только для примера, а предметом рассмотрения были числовые операции, укажем корректный способ преобразовать тип числового значения:
byteb=1;
byte c=(byte)-b;
Итак, все числовые операторы возвращают результат типа int или long. Однако существует два исключения.
Первое из них — операторы инкрементации и декрементации. Их действие заключается в прибавлении или вычитании единицы из значения переменной, после чего результат сохраняется в этой переменной и значение всей операции равно значению переменной (до или после изменения, в зависимости от того, является оператор префиксным или постфиксным). А значит, и тип значения совпадает с типом переменной. (На самом деле, вычисления все равно производятся с точностью минимум 32 бита, однако при присвоении переменной результата его тип понижается.)
byte х=5;
byte у1=х++; // на момент начала исполнения х равен 5
byte у2=х--; // на момент начала исполнения х равен 6
byte уЗ=++х; // на момент начала исполнения х равен 5
byte у4=--х; // на момент начала исполнения х равен 6
print(y1);
print(y2);
print(y3);
print(y4);
В результате получаем:
5 6 6 5
Никаких проблем с присвоением результата операторов ++ и — переменным типа byte. Завершая рассмотрение этих операторов, приведем еще один пример:
byte х=-128; print(-x);
byte у= 127; print(++y);
Результатом будет:
128 -128
Этот пример иллюстрирует вопросы преобразования типов при вычислениях и случаи переполнения.
Вторым исключением является оператор с условием ? :. Если второй и третий операнды имеют одинаковый тип, то и результат операции будет такого же типа.
byte х=2; byte у=3;
byte z=(x>y) ? х : у; // верно, х и у одинакового типа byte abs=(x>0) ? х : -х; // неверно!
Последняя строка неверна, так как третий аргумент содержит числовую операцию, стало быть, его тип int, а значит, и тип всей операции будет int, и присвоение некорректно. Даже если второй аргумент имеет тип byte, а третий — short, значение будет типа int.
Наконец, рассмотрим оператор конкатенации со строкой. Оператор + может принимать в качестве аргумента строковые величины