Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Вопрос: И что должен сделать компилятор?




Вопрос: И что должен сделать компилятор?

Ответ: Преобразовать от double к float.

Вопрос: А он может это сделать?

Ответ: Нет, не может, потому что вы пытаетесь преобразовать от старшего типа к младшему. Компилятор неявно это сделать не может. Можно конечно сделать все явным способом, но существует более простая возможность. Вы можете написать, что 7. 5 – это литерал-слог. Для этого добавляется в этот литерал буковка f (так называемый суффикс, который говорит, что это литерал float).

 

Вопрос: Чем принципиально отличаются числа int и double?

Ответ:

Принципиальное отличие int на double.

Вопрос: Начну с int. 7 / 0. Какой будет результат?

Ответ: Будет ошибка. Это уже виртуальная машина говорит, «дружок! ты делишь на 0! У тебя ошибка в программе. ArithmeticException! Делить на ноль нельзя! »

 

 

Обратите внимание, что в этой строчке программа завершается принудительно, потому что нет печати значения. Здесь можно было бы поставить println(“Hello”). Hello у нас не будет. Почему? Программа была принудительно завершена в той строчке, где вы допустили ошибку.

 

Второй раз делаю тоже самое. Только меняю int на float (или на double). И опять делю 7 на 0. Какой будет результат?

run: Infinity СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд) run: Infinity СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд)

Вот смотрите. Во-первых программа не вылетает. В данном случае деление 7 на 0 – это бесконечность.

Так в чем же принципиальное отличие int от double.

Смотрите:

  • int и все целочисленные типы – это абсолютно точное представление чисел в памяти компьютера. Если 3, значит 3, а не 2. 99999999999. Ровно 3. Это означает, что вы можете целые числа сравнивать на ==. Я могу спросить a == b? Но делать на 0 нельзя, потому что бред. Вы говорите, дай мне точное значение бесконечности в диапазоне +/- два миллиарда. Это безобразие, а не постановка задачи. Поэтому виртальная машина выдает вам ошибку.
  • В случае float и double – это неточное представление чисел в памяти компьютера. Приведу классический пример. Делится 1 на 33. Результат складывается 33 раза. Какой будет результат? Ну только не 1. Потому что число не точно хранится в памяти компьютера.

Я для чисел double могу проверить является оно бесконечностью или нет. Я могу в переменную double сразу положить значение бесконечности. В математике же вы можете «a» присвоить бесконечность? Да. В нашем проекте я хочу переменной «c» присвоить бесконечность.

NaN означает «Not a Number» - Не число. Т. е. здесь есть специально готовые значения, обратите внимание. Обычный double вам не даст этого, потому что это простой тип данных. А Double – это класс-обертка.

Я делю 7 на бесконечность. Какой будет результат?

Ответ: Любое число, деленное на бесконечность равно нулю. Поэтому ответ 0.

Вопрос: Что еще отсюда следует сказать по поводу float и double?

Ответ: Вы не можете для double выполнять сравнение, например, a == b. Нельзя писать проверку двух чисел с плавающей точкой на точное равно. Ни в коем случае! Поэтому здесь надо быть аккуратным.

 

Операции языка Java.

Вот мы создали переменные, мы знаем, что есть разные типы данных. У них есть разные возможности.

Возникает вопрос: А что с ними можно еще делать, кроме как, «+-/*»?

Ответ: Вот все операции ЯП Java.

 

Operators                 Precedence
postfix           expr++ expr--
unary              ++expr --expr +expr -expr ~!
multiplicative           * / %
additive               + -
shift                       < < > > > > >
relational             < > < = > = instanceof
equality               ==! =
bitwise AND             &
bitwise exclusive OR         ^
bitwise inclusive OR           |
logical AND               & &
logical OR            ||
ternary                 ? :
assignment   = += -= *= /= %= & = ^= |= < < = > > = > > > =

 

Есть такая операция, которая обозначается значком «%». Это остаток от деления. Я беру 7 % 2. Остаток от деления 1. Помните, дети в детском саде учатся делить в столбик. И при делении получают остаток. Вот это и есть остаток от деления. Это идеальный способ, как вы можете проверить четное или нечетное число. Если остаток от деления не 0, то число у нас получается нечетное, а если бы было 8, т. е. четное число, то остаток от деления был бы 0. В ЯП остаток от деления работает с float, и с double.

run: 0. 09999999999999964 СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд)

 

И ещё одно важное отличие. Сейчас мы поговорим про операции сдвига, называются они SHIFT. Т. е. я могу биты в числе двигать влево, а могу вправо. Вот у меня есть четыре бита: 1100.

 

Я могу биты двигать влево. Что это означает? Тот бит, который был старшим, он выходит за границу и пропадает. А отсюда какие биты выезжают? Нули.

Т. е. я двигаю влево. Старшие биты пропадают, а выезжают младшие нули.

А есть операция сдвига вправо. А теперь уже наоборот. Те, которые справа они пропадают. Я сдвинул за границу, соответственно бит пропадет. А с другой стороны кто-то выезжает, если я двигаю вправо.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...