Опубликован: 04.12.2009 | Доступ: свободный | Студентов: 8414 / 657 | Оценка: 4.30 / 3.87 | Длительность: 27:27:00
Лекция 3:

Примитивные типы данных и операторы для работы с ними

< Лекция 2 || Лекция 3: 1234 || Лекция 4 >

3.3. Основные операторы для работы с целочисленными величинами

Все перечисленные ниже операторы действуют на две целочисленные величины, которые называются операндами. В результате действия оператора возвращается целочисленный результат. Во всех перечисленных далее примерах i и j обозначают целочисленные выражения, а v – целочисленную переменную.

Таблица 3.5.
Оператор Название Пример Примечание
+ Оператор сложения i+j В случае, когда операнды i и j имеют разные типы или типы byte, short или char, действуют правила автоматического преобразования типов.
Оператор вычитания i-j
* Оператор умножения i*j
/ Оператор деления i/j Результат округляется до целого путем отбрасывания дробной части как для положительных, так и для отрицательных чисел.
% Оператор остатка от целочисленного деления i%j Возвращается остаток от целочисленного деления
= Оператор присваивания v=i Сначала вычисляется выражение i, после чего полученный результат копируется в ячейку v
++ Оператор инкремента (увеличения на 1) v++ v++ эквивалентно v=v+1
-- Оператор декремента (уменьшения на 1) v-- v-- эквивалентно v=v-1
+= v+=i v+=i эквивалентно v=v+i
-= v-=i v-=i эквивалентно v=v-i
*= v*=i v*=i эквивалентно v=v*i
/= v/=i v/=i эквивалентно v=v/i
%= v%=i v%=i эквивалентно v=v%i

Также имеются важные методы классов Integer и Long, обеспечивающие преобразование строкового представления числа в целое значение:

  • Integer.parseInt( строка )
  • Long.parseLong( строка )

Например, если в экранной форме имеются текстовые пункты ввода jTextField1 и jTextField2, преобразование введенного в них текста в числа может проводиться таким образом:

  • int n=Integer.parseInt(jTextField1.getText());
  • long n1=Long.parseLong(jTextField2.getText());

Функции Integer.signum ( число ) и Long.signum ( число ) возвращают знак числа – то есть 1 если число положительно, 0, если оно равно 0, и -1 если число отрицательно. Кроме того, в классах Integer и Long имеется ряд операторов для работы с числами на уровне их битового представления.

Классы Integer и Long являются так называемыми оболочечными классами ( wrappers ), о них речь пойдет чуть дальше.

3.4. Вещественные типы и класс Math

Таблица 3.6.
Тип Размер Диапазон Описание
float 4 байта (32 бит) 1.5*10^{-45}..3.4*10^{38} "Одинарная" точность, 7-8 значащих десятичных цифр мантиссы.

Тип real*4 стандарта IEEE754

double 8 байт (64 бит) 5*10^{-324}..1.7*10^{308} "Двойная" точность, 15..16 значащих цифр мантиссы.

Тип real*8 стандарта IEEE754

Таблица 3.7.
Оператор Название Пример Примечание
+ Оператор сложения x+y В случае, когда операнды x и y имеют разные типы, действуют правила автоматического преобразования типов.
Оператор вычитания x-y
* Оператор умножения x*y
/ Оператор деления x/y Результат является вещественным. В случае, когда операнды x и y имеют разные типы, действуют правила автоматического преобразования типов.
% Оператор остатка от целочисленного деления x%y Возвращается остаток от целочисленного деления x на y. В случае, когда операнды x и y имеют разные типы, действуют правила автоматического преобразования типов.
Таблица 3.8.
Оператор Название Пример Примечание
= Оператор присваивания v=x Сначала вычисляется выражение x, после чего полученный результат копируется в ячейку v
++ Оператор инкремента (увеличения на 1) v++ ++v эквивалентно v=v+1
-- Оператор декремента (уменьшения на 1) v-- --v эквивалентно v=v-1
+= v+=x эквивалентно v=v+x
-= v-=x эквивалентно v=v-x
*= v*=x эквивалентно v=v*x
/= v/=x эквивалентно v=v/x
%= v%=x эквивалентно v=v%x

Математические функции, а также константы "пи" (Math.PI) и "е" (Math.E ) заданы в классе Math, находящемся в пакете java.lang.

Для того, чтобы их использовать, надо указывать имя функции или константы, квалифицированное впереди именем класса Math.

Например, возможны вызовы Math.PI или Math.sin(x). При этом имя пакета java.lang указывать не надо – он импортируется автоматически. К сожалению, использовать математические функции без квалификатора Math, не получается, так как это методы класса.

Константы в классе Math заданы так:

  • public static final double E = 2.7182818284590452354;
  • public static final double PI = 3.14159265358979323846;

Модификатор static означает, что это переменная класса; final означает, что в классе-наследнике переопределять это значение нельзя.

В приведенной ниже таблице величины x, y, angdeg, angrad имеют тип double, величина a – тип float, величины m, n – целые типов long или int. Математические функции возвращают значения типа double, если в примечании не указано иное.

Таблица 3.9.
Оператор класса Math Примечание
Тригонометрические и обратные тригонометрические функции
sin(x) sin(x) - синус
cos(x) cos(x) - косинус
tan(x) tg(x) - тангенс
asin(x) arcsin(x) - арксинус
acos(x) arccos(x) - арккосинус
atan(x) arctg(x) - арктангенс
atan2(y, x) Возвращает угол, соответствующий точке с координатами x,y, лежащий в пределах (-\pi,\pi].
toRadians(angdeg) angdeg / 180.0 * PI; - перевод углов из градусов в радианы.
toDegrees(angrad) angrad * 180.0 / PI; - перевод углов из радиан в градусы.
Степени, экспоненты, логарифмы
exp(x) e^x - экспонента
expm1(x) e^x-1. При x, близком к 0, дает гораздо более точные значения, чем exp(x)-1
log(x) ln(x) – натуральный логарифм.
log10(x) \log_{10}(x) – десятичный логарифм.
log1p(x) \ln(1+x). При x, близком к 0, дает гораздо более точные значения, чем \log(1+x)
sqrt(x) \sqrt{} - квадратный корень
cbrt(x) \sqrt[3]{} - кубический корень
hypot(x,y) \sqrt{x^2+y^2} - вычисление длины гипотенузы по двум катетам
pow(x, y) x^y – возведение x в степень y
sinh(x) \sh(x)=\frac{e^x-e^{-x}}{2} – гиперболический синус
cosh(x) \ch(x)=\frac{e^x+e^{-x}}{2} – гиперболический косинус
tanh(x) \th(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}} – гиперболический тангенс
Модуль, знак, минимальное, максимальное число
abs(m)

abs(x)

Абсолютное значение числа. Аргумент типа int, long, float или double. Результат того же типа, что аргумент.
signum(a)

signum(x)

Знак числа. Аргумент типа float или double. Результат того же типа, что аргумент.
min(m,n)

min(x,y)

Минимальное из двух чисел. Аргументы одного типа. Возможны типы: int, long, float, double. Результат того же типа, что аргумент.
max(m,n)

max(x,y)

Максимальное из двух чисел. Аргументы одного типа. Возможны типы: int, long, float, double. Результат того же типа, что аргумент.
Округления
ceil(x) Ближайшее к x целое, большее или равное x
floor(x) Ближайшее к x целое, меньшее или равное x
round(a)

round(x)

Ближайшее к x целое. Аргумент типа float или double. Результат типа long, если аргумент double, и типа int – если float. То же, что (int)floor(x + 0.5).
rint(x) Ближайшее к x целое.
ulp(a)

ulp(x)

Расстояние до ближайшего большего чем аргумент значения того же типа ("дискретность" изменения чисел в формате с плавающей точкой вблизи данного значения). Аргумент типа float или double. Результат того же типа, что аргумент.
Случайное число, остаток
random() Псевдослучайное число в диапазоне от 0.0 до 1.0. При этом 0\le\text{Math.random()}<1
IEEEremainder(x,y) Остаток от целочисленного деления x/y, то есть x-y*n, где n – результат целочисленного деления

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

  • Float.parseFloat ( строка )
  • Double.parseDouble ( строка )

Например, если в экранной форме имеются текстовые пункты ввода jTextField1 и jTextField2, преобразование введенного в них текста в числа может проводиться таким образом:

  • float f1= Float.parseFloat(jTextField1.getText()) ;
  • double d1= Double.parseDouble(jTextField2.getText()) ;

Иногда вместо класса Math ошибочно пытаются использовать пакет java.math, в котором содержатся классы BigDecimal, BigInteger, MathContext, RoundingMode. Класс BigDecimal обеспечивает работу с десятичными числами с произвольным числом значащих цифр – в том числе с произвольным числом цифр после десятичной точки. Класс BigInteger обеспечивает работу с целыми числами произвольной длины. Классы MathContext и RoundingMode являются вспомогательными, обеспечивающими настройки для работы с некоторыми методами классов BigDecimal и BigInteger.

< Лекция 2 || Лекция 3: 1234 || Лекция 4 >
Полетаев Дмитрий
Полетаев Дмитрий
Не очень понятно про оболочечные Данные,ячейки памяти могут наверно размер менять,какое это значение те же операции только ячейки больше,по скорости тоже самое
Максим Старостин
Максим Старостин

Код с перемещением фигур не стирает старую фигуру, а просто рисует новую в новом месте. Точку, круг.