Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы Рыков.docx
Скачиваний:
103
Добавлен:
21.04.2015
Размер:
305.38 Кб
Скачать

14.Хранение данных в памяти эвм.

Память современной ЭВМ строится в виде многоступенчатой иерархической системы.В иерархию памяти ЭВМ обычно входят: внешняя память очень большой ёмкости, внутренняя, или оперативная, память; сверхоперативная память; регистры; постоянная память); буферная память как промежуточное звено при обмене между ЗУ различных уровней памяти ЭВМ.

Существенное ускорение вычислительного процесса за счёт уменьшения числа обращений к главнойпамяти может быть достигнуто использованием так называемой магазинной (гнездовой, стековой) памяти,представляющей собой набор отдельных словарных регистров, одноимённые разряды которых соединенымежду собой цепями сдвига. Применение магазинной памяти приводит также к уменьшению места,отводимого в главной памяти для хранения программ, и позволяет избегать запоминания содержимогорегистров в главной памяти при переходе к подпрограммам или при прерывании данной программывнешними сигналами.

15.Приведение типов (явное и автоматическое). Константы и переменные.

При всём многообразии типов часто возникают ситуации, когда данные одного типа нужно преобразовать к другому типу.

Некоторые преобразования происходят неявно. Рассмотрим такой пример:

double a = 3;

System.out.println(a); // выведет 3.0

Переменная типа double предусматривает хранение не только целой, но и десятичной части числа, т.е. фактически в переменную запишется значение 3.0 (три целых и ноль десятых), которое потом и выведется на экран с помощью следующей команды.

Java преобразовала 3 в 3.0 (целые в вещественные) самостоятельно, без явного участия разработчика. Такое преобразование (или, как ещё говорят, приведение) типа данных называется неявным или автоматическим.

Оно происходит всякий раз, когда в процессе преобразования не могут потеряться какие-либо данные.

Но потеря может происходить, когда мы попытаемся, например, из вещественного числа получить целое. Это можно сделать округлив число или взяв только его целую часть. Но дробную часть при этом придётся забыть, и, если она не была нулевой, то какие-то полезные данные могут потеряться.

Например, если мы произведём следующее присваивание, то при попытке откомпилировать программу получим такую ошибку от отладчика «возможна потеря точности»:

int a = 3.14; // ошибка possible loss of precision

Но даже если десятичная часть была бы нулевой (справа стояло бы значение 3.0), то мы получили бы ту же ошибку. То есть Java не занимается анализом самого значения, а обращает внимание только на его тип.

Тем не менее, преобразовать вещественное значение к целому мы всё таким можем, явно сообщив в программе о своём намерении. Для этого слева от исходного элемента надо в круглых скобках указать название типа, к которому его нужно привести.

int a = (int) 3.14;

System.out.println(a); // выведет 3

Такое преобразование с указанием целевого типа называется явным.

Явное преобразование вещественного значения к целому типу происходит за счёт отбрасывания десятичной части (берётся только целая часть).

double b = 2.6;

int c = (int) (0.5 + b); // можно применять к целым выражениям

System.out.println(c); // выведет 3

System.out.println((int)9.69); // выведет 9

System.out.println((int)'A'); // выведет 65 — код символа «A»

System.out.println((double)3); // выведет 3.0

Явное преобразование может потребоваться также в тех случаях, когда значение типа позволяющего хранить большее количество знаков надо привести к типу, способному хранить меньшее количество знаков числа. Например, когда long надо преобразовать к short. О том, как происходят такие преобразования, будет рассказано далее при обсуждении принципов хранения данных в памяти компьютера.