Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Содержание сайт... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Создание отчето... 65061
Модуль Forms 64836
Пример работы с... 63237
ТЕХНОЛОГИИ ДОСТ... 61550
Имитационное мо... 57390
Реклама
http://mzastava.ru/ отели и гостиницы костромы.
Сейчас на сайте
Гостей: 6
На сайте нет зарегистрированных пользователей

Пользователей: 13,081
новичок: Abdukarimov A
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Моделирование процесса обеспечивающего надежность функционирования АСУ Т...
Моделирование работы перекрёстка по регулированию движения на GPSS + Поя...
Моделирование вычислительного центра на GPSS + Отчет + Блок схема

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
Операции. Операции инкрементирования и декрементирования
Для обозначения арифметических операций сложения, вычитания, умножения и деления в Java используются обычные знаки подобных операций: + - * и / соответственно. Операция / обозначает целочисленное деление, если оба ее аргумента являются целыми числами. В противном случае эта операция обозначает деление чисел с плавающей точкой. Остаток от деления целых чисел обозначается символом %. Например, 15/2 равно 7, 15%2 равно 1, а 15.0/2 — 7.5.
Заметим, что в результате целочисленного деления на нуль генерируется исключение, в то время как результатом деления на нуль чисел с плавающей точкой является бесконечность или NaN.
В Java предусмотрена сокращенная запись бинарных арифметических операций (т.е. операций, предполагающих два операнда). Например, оператор
х += 4; равнозначен оператору
х = х + 4;



(В сокращенной записи символ арифметической операции, например * или %, размещается перед знаком равенства, например *= или %=.)
НА ЗАМЕТКУ! Одной из заявленных целей языка Java является переносимость. Вычисления должны приводить к одинаковому результату, независимо от того, какая виртуальная машина их выполняет. Для арифметических операций над числами с плавающей точкой соблюдение этого требования неожиданно оказалось непростой задачей. Для хранения числовых значений типа double используются 64 бита, но в некоторых процессорах применяются 80-разрядные регистры с плавающей точкой. Эти регистры обеспечивают дополнительную точность на промежуточных этапах вычисления. Рассмотрим в качестве примера следующее выражение:

double w = х * у / z;




Многие процессоры компании Intel вычисляют выражение х * у и сохраняют этот промежуточный результат в 80-разрядном регистре, затем делят его на значение переменной z и, наконец, округляют результат до 64 бит. Подобным образом можно повысить точность вычислений, избежав переполнения. Но этот результат может оказаться иным, если в процессе всех вычислений используется 64-разрядный процессор. По этой причине в первоначальном описании виртуальной машины Java указывалось, что все промежуточные вычисления должны округляться. Это вызвало протест многих специалистов. Округление не только может привести к переполнению. Вычисления при этом происходят медленнее, поскольку операции округления отнимают некоторое время. По этой причине язык Java был усовершенствован таким образом, чтобы распознавать случаи конфликтующих требований для достижения оптимальной производительности и точной воспроизводимости результатов. По умолчанию при промежуточных вычислениях в виртуальной машине может использоваться повышенная точность. Но в методах, помеченных ключевым словом strictfp, должны применяться точные операции над числами с плавающей точкой, гарантирующие воспроизводимость результатов. Например, метод main () можно записать так:

public static strictfp void main(String[] args)



В этом случае все команды в теле метода main () будут выполнять точные операции над числами с плавающей точкой. А если пометить ключевым словом strictfp класс, то во всех его методах должны выполняться точные операции с плавающей точкой.
Многое при подобных вычислениях зависит от особенностей работы процессоров Intel. По умолчанию в промежуточных результатах может использоваться расширенный показатель степени, но не расширенная мантисса. (Процессоры компании Intel поддерживают округление мантиссы без потери производительности.) Следовательно, вычисления по умолчанию отличаются от точных вычислений лишь тем, что в последнем случае возможно переполнение.
Если сказанное выше кажется вам слишком сложным, не отчаивайтесь. Переполнение при вычислениях с плавающей точкой, как правило, не возникает. А в примерах, рассматриваемых в этой книге, ключевое слово strictfp использоваться не будет.

Операции инкрементирования и декрементирования

Программисты, конечно, знают, что одной из самых распространенных операций с числовыми переменными является добавление или вычитание единицы. В Java, как и в С и С++, для этой цели предусмотрены операции инкрементирования и декрементирования. Так, в результате вычисления оператора п++ к текущему значению переменной п прибавляется единица, а оператор п— уменьшает ее значение на единицу. После выполнения приведенного ниже фрагмента кода значение переменной п становится равным 13.
int n = 12; n++;



Операции C++ и — изменяют значение переменной, и поэтому их нельзя применять к самим числам. Например, выражение 4++ считается недопустимым.
Существуют два вида операций инкрементирования и декрементирования. Выше продемонстрирована постфиксная форма, в которой символы операции размещаются после операнда. Но есть и префиксная форма: ++п. Обе эти операции изменяют значение переменной на единицу. Их отличие проявляется только тогда, когда эти операции присутствуют в выражениях. В префиксной форме сначала изменяется значение переменной, и для дальнейших вычислений уже используется новое значение, а в постфиксной форме используется старое значение этой переменной, и лишь после данной операции оно изменяется, как показано в приведенных ниже примерах.
int m = 7; int n = 7;
int a = 2 * ++m; // теперь значение а равно 16, am равно 8 int b = 2 * n++; // теперь значение b равно 14, a n равно 8



Пользоваться операциями инкрементирования и декрементирования в выражениях не рекомендуется, поскольку это зачастую запутывает код и приводит к досадным ошибкам.
(Именно операция С++ дала название языку С++, что и послужило поводом к первой шутке о нем. Недоброжелатели отмечают, что даже имя этого языка содержит в себе ошибку: "Язык следовало бы назвать ++С, потому что мы хотели бы пользоваться им только после его улучшения".)
Опубликовал Kest November 18 2014 14:29:29 · 0 Комментариев · 2581 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
mp3tag
Философия C++. Пр...
Иллюстрированный ...
Delphi. Учимся на...
UmEdit
SUIPack
Прграммирование в...
Обучение Borland ...
Киллер окон
Xrumer 4 Platinum...
PBFoldder
BIOS
Профессиональное ...
PHP в примерах
PDJ_Anima
Report
Правила программи...
Язык программиров...
ЯЗЫК ПРОГРАММИРОВ...
Библия хакера 2 К...

Топ загрузок
Приложение Клие... 100466
Delphi 7 Enterp... 86616
Converter AMR<-... 20077
GPSS World Stud... 12635
Borland C++Buil... 11753
Borland Delphi ... 8555
Turbo Pascal fo... 7037
Visual Studio 2... 4998
Калькулятор [Ис... 4759
FreeSMS v1.3.1 3541
Случайные статьи
Дырки в безопаснос...
Спецификация EPON
Systems Management...
Это предотвратит у...
ГЕОТЕРМАЛЬНЫЕ РЕСУРСЫ
Эффективность прям...
Решения к главе 9
Продолжительность ...
Прикладные службы
КЛАССЫ С ДИНАМИЧЕС...
Cannot Read or Wri...
Маршалер свободной...
marketnorist
Информационные и с...
Треугольные массивы
FVARIABLE (ОПРЕДЕЛ...
Полная статистика ...
Очереди
Немного программир...
DsAuthors. Компьют...
Бюджеты и инфографика
Зарегистрировать и...
Где купить рацию
Какими недостаткам...
Разработка плана б...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?