Lecture10 (Лекции по Технологии программирования. Компонентный подход), страница 4
Описание файла
Файл "Lecture10" внутри архива находится в папке "Лекции по Технологии программирования. Компонентный подход". PDF-файл из архива "Лекции по Технологии программирования. Компонентный подход", который расположен в категории "". Всё это находится в предмете "основы программной инженерии" из 6 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 4 страницы из PDF
Его значения лежатмежду -27 и (27-1) (т.е. между -128 и 127)• short, чьи значения лежат в интервале -215 – (215-1) (-32768 – 32767)31•int, чьи значения лежат в интервале -2•long, чьи значения лежат в интервале -2– (231-1) (-2147483648 – 2147483647)63– (263-1) (-9223372036854775808 –9223372036854775807)В C# имеются беззнаковые аналоги всехперечисленных выше типов:свой тип byte со значениями от 0 до (28-1 =255).16ushort со значениями от 0 до (2 -1) = 6553532uint со значениями от 0 до (2 -1) = 429496729564ulong со значениями от 0 до (2 -1) =Классы-обертки целочисленных типовназываются так:18446744073709551615Типы-обертки целочисленных типовназываются так:java.lang.Bytejava.lang.Shortjava.lang.Integerjava.lang.LongSystem.SByteSystem.ByteSystem.Int16System.UInt16System.Int32System.UInt32System.Int64System.UInt64Минимальные и максимальные значенияпримитивных типов можно найти в их типахобертках в виде констант (static final полей)MIN_VALUE и MAX_VALUE.Минимальные и максимальные значенияпримитивных типов можно найти в их типахобертках в виде констант MinValue и MaxValue.Над значениями целочисленных типов определены следующие операции.•==, != — сравнение на равенство и неравенство.•<, <=, >, >= — сравнение на основе порядка.•+, -, *, /, % — сложение, вычитание, умножение, целочисленное деление, взятиеостатка по модулю.•++, -- — увеличение и уменьшение на единицу.
Если такой оператор написан дооперанда, то значение всего выражения совпадает с измененным значением операнда, еслипосле — то с неизмененным.В результате выполнения последовательности действийx = 1; y = ++x; z = x++;значение x станет равно 3, а значения y и z — 2.•~, &, |, ^ — побитовые операции дополнения, конъюнкции, дизъюнкции иисключающего ‘или’.•<<, >> — операторы, сдвигающие биты своего первого операнда влево и вправо на числопозиций, равное второму операнду.В Java оператор >> сдвигает вправо биты числа,дополняя его слева значением знакового бита —нулем для положительных чисел и единицейдля отрицательных.Специальный оператор >>> используется длясдвига вправо с заполнением освобождающихсяслева битов нулями.•В C# оператор >> сдвигает вправо биты числа,дополняя его слева для чисел со знакомзначением знакового бита, а для беззнаковыхчисел — нулем.Для операций +, -, *, /, %, ~, &, |, ^, <<, >> (и Java-специфичной операции >>>)имеются соответствующие операции присваивания.
При этом выражение x op= y, где op— одна из этих операций, эквивалентно выражению x = (T)((x) op (y)), где T — тип x,за исключением того, что значение x вычисляется ровно один раз.В Java результаты арифметических действийвычисляются в зависимости от типа этихрезультатов, с отбрасыванием битов,«вылезающих» за размер типа.В C# результат арифметических действий надцелочисленными данными, приводящих кпереполнению, зависит от контекста, в которомэти действия производятся.Таким образом, эти операции реализуютарифметику по модулю 2n для n, подходящегодля данного типа.Арифметические операции над целыми числамиприводят к созданию исключений только в трехслучаях: при делении на 0 или вычисленииостатка по модулю 0, при конвертации впримитивный тип ссылки на объект классаобертки, равной null, а также при исчерпаниидоступной Java-машине памяти, которое можетслучиться из-за применения операций -- и ++ содновременным созданием объектов классовоберток.Если действие происходит в uncheckedконтексте (т.е.
внутри блока или выражения,помеченных ключевым словом unchecked), товычисления производятся в арифметике поподходящему модулю 2n.Если же эти действия производятся в checkedконтексте (т.е. внутри блока или выражения,помеченных модификатором checked), топереполнение приводит к созданиюисключения.По умолчанию действия, производимые в ходевыполнения, происходят в unchecked контексте,а действия, которые выполняются надконстантами во время компиляции — в checkedконтексте. При этом создание исключения вовремя компиляции приводит к выдачесообщения об ошибке.Любые целочисленные типы можно явно приводить друг к другу, а неявные преобразованияпереводят из меньших типов в большие, если при этом нет перехода от типа со знаком кбеззнаковому (обратный переход возможен).В обоих языках целочисленным типом считается и тип char, чьими значениями являются 16битные символы (от '\u0000' до '\uffff').
Для него определен тот же набор операций, нопреобразования между ним и другими типами по умолчанию не производятся (явныепреобразования возможны).Типы чисел с плавающей точкойПредставление типов значений с плавающей точкой, float и double, а также операции с ними,соответствуют стандарту на вычисления с плавающей точкой IEEE 754 (он же —IEC 60559) [11,12]. Согласно этому стандарту значение такого типа состоит из знакового бита,мантиссы и экспоненты (у значения float 23 бита отводятся на мантиссу и 8 на экспоненту, уdouble — 52 бита на мантиссу и 11 на экспоненту).Помимо обычных чисел значения обоих типов включают -0.0 (кстати, написав так, выполучите обычный 0.0, поскольку этот текст будет воспринят как константа 0.0, к которойприменен унарный оператор -; единственный способ получить -0.0 — конвертировать его битовоепредставление — в шестнадцатеричном виде для типа float он представляется как 0x80000000, адля double — 0x8000000000000000), положительные и отрицательные бесконечности (для типаfloat это 0x7f800000 и 0xff800000, а для double — 0x7ff0000000000000 и 0xfff0000000000000),а также специальное значение NaN (Not-A-Number, не число; оно может быть представлено любымизначениями, у которых экспонента максимальна, а мантисса не равна 0).Для значений с плавающей точкой определены следующие операции.•==, != — сравнения на равенство и неравенство.
В соответствии с IEEE 754 NaN не равнони одному числу, в том числе самому себе. -0.0 считается равным 0.0.•<, <=, >, >= — сравнения на основе порядка. +∞ больше, чем любой обычное число и -∞,а -∞ меньше любого конечного числа. NaN несравнимо ни с одним числом, даже с самимсобой — это значит, что любая указанная операция возвращает false, если один из ееоперандов — NaN. -0.0 считается равным, а не меньше, чем 0.0.•+, -, *, /, % — сложения, вычитание, умножение, деление, взятие остатка по модулю, атакже соответствующие операции присваивания с одновременным выполнением одного изэтих действий. Все эти операции действуют согласно IEEE 754, кроме операциивычисления остатка, которая реализована так, чтобы при всех конечных a и b (b != 0)выполнялось a%b == a – b*n, где n — самое большое по абсолютной величине целоечисло, не превосходящее |a/b|, знак которого совпадает со знаком a/b.
По абсолютнойвеличине a%b всегда меньше b, знак a%b совпадает со знаком a.Согласно стандарту IEEE 754 все арифметические операции определены для бесконечныхаргументов «естественным» образом: 1.0/0.0 дает +∞, -1.0/0.0 дает -∞, 0.0/0.0 — NaN,конечное x в сумме с +∞ дает +∞, а +∞+(-∞) — NaN. Если один из операндов NaN, торезультат операции тоже NaN.•++, -- — увеличение и уменьшение на единицу. Для бесконечностей и NaN результатприменения этих операторов совпадает с операндом.В Java в классах java.lang.Float иjava.lang.Double есть константы, равныемаксимальному конечному значению типа,минимальному положительному значению типа,положительной и отрицательнойбесконечностям и NaN.-23127Float.MAX_VALUE = (2-2 )·2-149Float.MIN_VALUE = 2-591023Double.MAX_VALUE = (2-2 )·2-1074Double.MIN_VALUE = 2Бесконечности и NaN в обоих случаяхназываются POSITIVE_INFINITY,NEGATIVE_INFINITY и NaN.В C# соответствующие классы System.Single иSystem.Double также хранят эти значения ввиде констант MaxValue, Epsilon,PositiveInfinity, NegativeInfinity и NaN.В C# есть еще один тип для представлениячисел с плавающей точкой — decimal (типобертка для него называется System.Decimal).Значения этого типа представляются 128битами, из которых один используется длязнака, 96 — для двоичной мантиссы, еще 5 —для представления десятичной экспоненты,лежащей от 0 до 28.
Остальные биты неиспользуются.Представляемое знаком s (+1 или -1), мантиссойm (0–(296-1)) и экспонентой e (0–28) значениеравно (-1)s·m·10-e.Таким образом, значения этого типа могут, вотличие от стандартных типов float и double,представлять десятичные дроби с 28-ю точнымизнаками и используются для финансовыхвычислений. Такая точность необходима,поскольку в этих вычислениях ошибкиокругления в сотые доли процента принакоплении за счет больших сумм и большогоколичества транзакций в течение несколькихлет могут привести к значительным суммамубытков для разных сторон.Для типа decimal определены все те жеоперации, что и для типов с плавающей точкой,однако при выходе их результатов за рамкизначений типа создается исключительнаяситуация. Этот тип не имеет специальныхзначений -0.0, NaN и бесконечностей.В Java классы, методы и инициализаторы могутбыть помечены модификатором strictfp.