Арифметические операторы примитивных числовых типов
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

 

n Арифметические операции

l + – сложение двух значений

l - – вычитание второго значения из первого

l * – умножение двух значений

l / – деление первого значения на второе

l % – остаток от деления первого значения на второе

n Результат имеет тип, совпадающий с «наиболее широким» типом из типов операндов, но не меньше, чем int

 

Особенность примитивных вещественных типов

 

int a = 5, b = 0; int c = a / b; System.out.println(c); Exception in thread "main" java.lang.ArithmeticException  

 

float a = 5, b = 0; float c = a / b; System.out.println(c);   Infinity

 

Легальные значения

Positive Infinity (Infinity)

Negative Infinity (-Infinity)

Not a Number (NaN)

Различаются значения 0, +0 и -0

 

Арифметические операторы примитивных числовых типов

 

n Инкременты и декременты – соответственно, увеличивают и уменьшают значение на 1

l Постфиксная форма: i ++, i --
результатом оператора является прежнее (неизмененное) значение

l Префиксная форма: ++ i, -- i
результатом оператора является новое значение

n Унарные + и -

l Аналогичны случаю, когда первый операнд равен 0

l Если знак + или - находится перед литералом, он может трактоваться как часть литерала

 

 



Побитовые операторы примитивных целых типов

 

n Логические операторы

l & – «и» (and)
      1 &       3 ->        1
00000001 & 00000011 -> 00000001

l | – «или» (or)
    1 |          3 ->         3
00000001 | 00000011 -> 00000011

l ^ – «исключающее или» (xor)
      1 ^        3 ->      2
00000001 ^ 00000011 -> 00000010

l ~ – побитовое отрицание
~      1 ->        -2
~00000001 -> 11111110

n Вычисления производятся в типе int либо long

 









Побитовые операторы примитивных целых типов

 

n Операторы сдвига

l << – сдвиг влево
      1 << 2 ->           4
00000001 << 2 -> 00000100

l >> – арифметический сдвиг вправо
     4 >> 2 ->        1
00000100 >> 2 -> 00000001
       -1 >> 2 ->      -1
11111111 >> 2 -> 11111111

l >>> – логический сдвиг вправо
  4 >>> 2 ->        1
00000100 >>> 2 -> 00000001
        -1 >>> 2 ->                                       1073741823
11111111 >>> 2 -> 00111111 11111111 11111111 11111111

n Вычисления производятся в типе int либо long

 

 

Вопрос 17 Операторы сравнения, логических действий, присваивания и приведения типов для примитивных типов. 25-29 лекция Лексика языка Java











Операторы сравнения примитивных числовых типов

 

n > и < – строгое сравнение

n >= и <= – нестрогое сравнение

n == – определение равенства

n != – определение неравенства

n Результат – логическое значение: true или false

n Сравнение проводится в наиболее широком типе из типов операндов

 

Операторы примитивного логического типа

 

n == – определение равенства

n != – определение неравенства

n ! – отрицание

n & – логическое «и» (and)

n | – логическое «или» (or)

n ^ – логическое «исключающее или» (xor)

n && – условное «и»

    (может не вычислять второй операнд)

n || – условное «или»

    (может не вычислять второй операнд)

 

Операторы присваивания примитивных типов

 

· = – простое присваивание

· Тип выражения справа должен допускать присваивание в переменную слева

· +=, -=, *=, /=, %=, >>=, <<=, >>>=, &=, ^=, |=

· Присваивание с действием

· Выражение a ?= b эквивалентно a = a ? b, но выполняется быстрее

· Типы операндов должны позволять совершить операцию

 

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

 

n Неявное преобразование типов
Преобразование к более широкому типу

n Явное преобразование типов
Преобразование к указанному типу с помощью оператора ( type ) expr

 

short s1 = 29;

int i1 = s1;

float f1 = i1;

int i2 = 14;

short s2 = (short) i2;

short s = -134;

byte b = (byte) s; // b = 122;

 

Особенности преобразования примитивных числовых типов

 

n Более широким считается тип, переменные которого могут принимать большее количество значений

n Вещественные типы считаются шире целочисленных

n Это, естественно, не так

 

long orig = 0x7effffff00000000L; float fval = orig; long lose = (long)fval;   orig = 9151314438521880576 fval = 9 . 1513144 e 18 lose = 9151314442816847872  

 

 

Вопрос 18 Типы данных и их классификация. Ссылочные типы и их литералы. 8,9,11 лекция Лексика языка Java



Типы данных

 

n Ссылочные

l Предназначены для работы с объектами

l Переменные содержат ссылки на объекты

l Ссылка – это не указатель!

l Тип переменной определяет контракт доступа к объекту

l Примитивные (простые)

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

l Переменные содержат непосредственно значения

 

Типы данных

 

Тип данных определяется следующими характеристиками:

n Множество значений

l для примитивных типов – числа, не выходящие за диапазон типа

l для ссылочных типов – ссылки на объекты, контракт которых включает в себя контракт, определяемый типом ссылки

n Возможные операции со значениями

l для примитивных типов – операторы

l для ссылочных типов – действия, входящие в контракт типа (вызов методов и обращение к полям), и операторы

n Форма хранения и представления

l форма хранения определяется реализацией JVM

l JVM гарантирует одинаковое представление, не зависящее от реализации

 

Ссылочные типы

 

n К ссылочным типам относятся типы классов (в т.ч. массивов) и интерфейсов

n Переменная ссылочного типа способна содержать ссылку на объект, относящийся к этому типу

n Ссылочный литерал null

 

 

Вопрос 19 Операторы для ссылочных типов. 30-32 лекция Лексика языка Java

Операторы ссылочных типов

 

n new – создание объекта класса

n = – присвоение ссылки

l Тип выражения справа должен допускать присвоение в тип переменной слева

n == и != – сравнение ссылок

l Сравниваются только ссылки, а не состояние объектов!

n . – разыменование ссылки

l reference.method()

l reference.field

n () – вызов метода

n У любого объекта можно вызвать методы, объявленные в классе Object

 

Преобразование ссылочных типов

 

· Преобразование типа возможно, только если контракт целевого типа является частью контракта приводимого типа

· Более широким считается тип, переменные которого могут принимать большее количество значений.

· Родительский тип считается более общим (широким), чем дочерний.

· Неявное преобразование типов – преобразование от более узкого к более широкому

· Явное преобразование типов – преобразование от более широкого к более узкому с помощью оператора явного преобразования ( type ) expr

 

Преобразование и проверка ссылочных типов

 

Integer i = new Integer (5);

Object o = i ;

i = (Integer) o;

 

n Если явное преобразование типов невозможно, возникает ошибка java . lang . ClassCastException

n Соответствие типа можно проверить с помощью оператора instanceof, возвращающего true, если тип применим к объекту и false, если нет

n Оператор instanceof не позволяет определить реальный тип объекта, а лишь проверяет его соответствие указанному типу

 

Integer i = new Integer(5);

Object o = i;

if (o instanceof Integer) {

i = (Integer) o;

...

}

else { ... }

 

Вопрос 20 Оператор ветвления. Приоритеты операторов. 18,33 лекция Лексика языка Java

 

Оператор ветвления

n Формат:
<логическое выражение> ? <значение 1> : <значение 2>

 

double factor = (a > b) ? 1 : 0.7;

 

n Если логическое выражение истинно, возвращается значение второго операнда, а если ложно – третьего операнда

n Типы второго и третьего операндов должны быть «совместимы»

n Оператор можно применять в выражениях присваивания вместо инструкции ветвления

 

boolean flag = ...;

...

factor = flag ? 1 : 0.7;

/*


If (flag)

factor = 1;

Else

factor = 0.7;

*/

 

 

n Приоритет сверху вниз

n Постфиксные n Унарные n n Создание и приведение n Арифметика n Арифметика n Побитовый сдвиг n Сравнение          n Равенство n И (and) n Исключающее ИЛИ (xor) n Включающее ИЛИ (or) n Условное И (and) n Условное ИЛИ (or)      n Условный оператор    Операторы присваивания [] . (params) expr++ expr-- ++expr --expr +expr –expr ~ ! new (type)expr * / % + - << >> >>> < > >= <= instanceof == != & ^ | && || ? : = += -= *= /= %= >>= <<= >>>= &= ^= |=

Вопрос 21 Массивы: особенности, разновидности, объявление и инициализация. 35-38 лекция Лексика языка Java

Массивы

n Массив – упорядоченный набор элементов одного типа

n Элементами могут быть значения простых и ссылочных типов

n Массивы сами по себе являются объектами и наследуют от класса Object

n Доступ к элементам по целочисленному индексу с помощью оператора []

 

Дата: 2019-07-30, просмотров: 177.