Программирование на JAVA
Меню :
Стартовая
Основы программирования
Программирование на JAVA
Программирование на C++
Программирование на Pascal
Задачи по программированию
Почему были выделены именно эти два типа, int и long? Дело в том, что целочисленные литералы имеют тип int по умолчанию, или тип long, если стоит буква L или I. Именно поэтому корректным литералом считается только такое число, которое укладывается в 4 или 8 байт, соответственно. Иначе компилятор сочтет это ошибкой. Таким образом, следующие литералы являются корректными:
1
-2147483648 2147483648L 0L
111111111111111111L
Над целочисленными аргументами можно производить следующие операции:
• операции сравнения (возвращают булевское значение)
• <, <=, >, >=
—*, !
• числовые операции (возвращают числовое значение)
• унарные операции + и -
• арифметические операции +,-,*,/,%
• операции инкремента и декремента (в префиксной и постфиксной форме): ++ и --
• операции битового сдвига <<, », >»
• битовые операции ~, &, |, А
• оператор с условием ? :
• оператор приведения типов
• оператор конкатенации со строкой +
Операторы сравнения вполне очевидны и отдельно мы их рассматривать не будем. Их результат всегда булевского типа (true или false).
Работа числовых операторов также понятна, к тому же пояснялась в предыдущей лекции. Единственное уточнение можно сделать относительно операторов + и -, которые могут быть как бинарными (иметь два операнда), так и унарными (иметь один операнд). Бинарные операнды являются операторами сложения и вычитания, соответственно. Унарный оператор + возвращает значение, равное аргументу (+х всегда равно х). Унарный оператор -, примененный к значению х, возвращает результат, Равный 0-х. Неожиданный эффект имеет место в том случае, если аргумент равен наименьшему возможному значению примитивного типа.
int х=-2147483648; // наименьшее возможное значение типа int int у=-х;
Теперь значение переменной у на самом деле равно не 2147483648, поскольку такое число не укладывается в область значений типа int, а в точности равно значению х! Другими словами, в этом примере выражение -х==х истинно!
Дело в том, что если при выполнении числовых операций над целыми числами возникает переполнение и результат не может быть сохранен в данном примитивном типе, то Java не создает никаких ошибок. Вместо этого все старшие биты, которые превышают вместимость типа, просто отбрасываются. Это может привести не только к потере точной абсолютной величины результата, но даже к искажению его знака, если на месте знакового бита окажется противоположное значение.