Навигация
Главная
Поиск
Форум
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
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Модуль Forms 65535
ТЕХНОЛОГИИ ДОСТ... 64748
Имитационное мо... 58949
Реклама
Сейчас на сайте
Гостей: 7
На сайте нет зарегистрированных пользователей

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

Информационная система - продуктовый магазин на Turbo Pascal (База данны...
Поиск пути в графе заданном списками инцедентности на Turbo Pascal
Моделирование работы перекрёстка по регулированию движения на 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 Комментариев · 2732 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Программирование ...
JanButtonsV
Панель статистики...
Платформа програм...
Паскаль и Дельфи....
Pass [Исходник на...
NotePad Pro [Исхо...
Dealer
Сапёр
PBFoldder
Animated Menus
Разработка клиент...
Изучаем Ассемблер
Delphi 7: Для про...
Image Browser [Ис...
C++ Стандартная б...
Игра PackMan
DelTrayIcon [Исхо...
База данных: Книж...
CABfiles

Топ загрузок
Приложение Клие... 100501
Delphi 7 Enterp... 89120
Converter AMR<-... 20088
GPSS World Stud... 14218
Borland C++Buil... 12399
Borland Delphi ... 8809
Turbo Pascal fo... 7069
Калькулятор [Ис... 5027
Visual Studio 2... 5012
FreeSMS v1.3.1 3551
Случайные статьи
Введение
Приоритеты и ресурсы
АНТИПАТТЕРН: КЛОНИ...
Найдите печатный т...
Что такое Emotion ...
Абстрактная машина...
Память для классов...
9.4. Принципы
двусвязный список
Система SVR4
Подключения к друг...
3. См. задачу 2. Р...
Invalid register c...
Взаимодействие кли...
Файл записей (назв...
Моникеры и сохраня...
позволяет участник...
Эталонная модель п...
Монтирование NFS
Стандарт RS-449
Массивы в среде Vi...
GENERATE (ГЕНЕРИРО...
Карта END
Silver Fox - это д...
Hello World на tur...
Статистика



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


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