Класс integer в java
Содержание:
Перечислимый тип
Перечислимый тип данных назван так потому, что задается в виде перечисления констант в строго определенном порядке и в строго определенном количестве. Перечислимый тип состоит из списка констант. Переменные этого типа могут принимать значение любой из этих констант. Описание перечислимого типа имеет вид:
Type <имя типа>=(список констант); Var <имя переменной>:<имя типа>;
где <список констант> — это особый вид констант, задаваемых через запятую и имеющих свой порядковый номер, начиная с 0.
Например:
type направление=(север, юг, запад, восток); месяц=(июнь,июль,август,январь); емкость=(ведро,бочка,канистра,бак); var поворот:направление; отъезд:месяц; объем:емкость;
или так:
var поворот:(свер, юг, запад, восток); отъезд:(июнь, июль, август, январь); объем:(ведро, бочка, канистра, бак);
Можно выполнить такие операторы присваивания:
поворот:=юг; отъезд:=август; объем:=бак;
но нельзя выполнять смешанные присваивания:
отъезд:=юг; объем:=август;
К переменным перечислимого типа применимы следующие функции:
1. ORD — порядковый номер
2. PRED — предшествующий элемент
3. SUCC — последующий элемент.
Пример:
PRED(бочка)=ведро; SUCC(юг)=запад; ORD(июль)=1;
Переменные перечислимого типа можно сравнить, так как они упорядочены и пронумерованы. Так выражения: север < юг, июнь < январь имеют значения TRUE, а юг>запад и бак<бочка значение FАLSE.
Примеры переполнения
Рассмотрим переменную unsigned, которая состоит из 4-х бит. Любое из двоичных чисел, перечисленных в таблице выше, поместится внутри этой переменной.
«Но что произойдет, если мы попытаемся присвоить значение, которое занимает больше 4-х бит?». Правильно! Переполнение. Наша переменная будет хранить только 4 наименее значимых (те, что справа) бита, все остальные — потеряются.
Например, если мы попытаемся поместить число 21 в нашу 4-битную переменную:
Десятичная система | Двоичная система |
21 | 10101 |
Число 21 занимает 5 бит (10101). 4 бита справа (0101) поместятся в переменную, а крайний левый бит (1) просто потеряется. Т.е. наша переменная будет содержать 0101, что равно 101 (нуль спереди не считается), а это уже число 5, а не 21.
Примечание: О конвертации чисел из двоичной системы в десятичную и наоборот будет отдельный урок, где мы всё детально рассмотрим и обсудим.
Теперь рассмотрим пример в коде (тип short занимает 16 бит):
#include <iostream>
int main()
{
unsigned short x = 65535; // наибольшее значение, которое может хранить 16-битная unsigned переменная
std::cout << «x was: » << x << std::endl;
x = x + 1; // 65536 — это число больше максимально допустимого числа из диапазона допустимых значений. Следовательно, произойдет переполнение, так как переменнная x не может хранить 17 бит
std::cout << «x is now: » << x << std::endl;
return 0;
}
1 |
#include <iostream> intmain() { unsignedshortx=65535;// наибольшее значение, которое может хранить 16-битная unsigned переменная std::cout<<«x was: «<<x<<std::endl; x=x+1;// 65536 — это число больше максимально допустимого числа из диапазона допустимых значений. Следовательно, произойдет переполнение, так как переменнная x не может хранить 17 бит std::cout<<«x is now: «<<x<<std::endl; return; } |
Результат выполнения программы:
Что случилось? Произошло переполнение, так как мы попытались присвоить переменной значение больше, чем она способна в себе хранить.
Для тех, кто хочет знать больше: Число 65 535 в двоичной системе счисления представлено как 1111 1111 1111 1111. 65 535 — это наибольшее число, которое может хранить 2-байтовая (16 бит) целочисленная переменная без знака, так как это число использует все 16 бит. Когда мы добавляем 1, то получаем число 65 536. Число 65 536 представлено в двоичной системе как 1 0000 0000 0000 0000, и занимает 17 бит! Следовательно, самый главный бит (которым является 1) теряется, а все 16 бит справа — остаются. Комбинация 0000 0000 0000 0000 соответствует десятичному 0, что и является нашим результатом.
Аналогичным образом, мы получим переполнение, использовав число меньше минимального из диапазона допустимых значений:
#include <iostream>
int main()
{
unsigned short x = 0; // наименьшее значение, которое 2-байтовая unsigned переменная может хранить
std::cout << «x was: » << x << std::endl;
x = x — 1; // переполнение!
std::cout << «x is now: » << x << std::endl;
return 0;
}
1 |
#include <iostream> intmain() { unsignedshortx=;// наименьшее значение, которое 2-байтовая unsigned переменная может хранить std::cout<<«x was: «<<x<<std::endl; x=x-1;// переполнение! std::cout<<«x is now: «<<x<<std::endl; return; } |
Результат выполнения программы:
Переполнение приводит к потере информации, а это никогда не приветствуется. Если есть хоть малейшее подозрение или предположение, что значением переменной может быть число, которое находится вне диапазона допустимых значений используемого типа данных — используйте тип данных побольше!
Правило: Никогда не допускайте возникновения переполнения в ваших программах!
Ценность и представление
Значение какого — либо пункта с интегральным типом является математическим целым числом , что оно соответствует. Целочисленные типы могут быть беззнаковыми (способными представлять только неотрицательные целые числа) или знаковыми (способными также представлять отрицательные целые числа).
Целочисленное значение обычно указывается в исходном коде программы как последовательность цифр, необязательно с префиксом + или -. Некоторые языки программирования допускают другие обозначения, например шестнадцатеричные (основание 16) или восьмеричные (основание 8). Некоторые языки программирования также допускают разделители групп цифр .
Внутреннее представление этого элемента данных является то , как значение сохраняется в памяти компьютера. В отличие от математических целых чисел, типичные данные в компьютере имеют минимальное и максимальное возможное значение.
Наиболее распространенное представление положительного целого числа — это строка битов в двоичной системе счисления . Порядок байтов памяти, в которых хранятся биты, варьируется; видеть порядок байтов . Ширина или точности интегрального типа является числом бит в его представлении. Целочисленный тип с n битами может кодировать 2 n чисел; например, беззнаковый тип обычно представляет неотрицательные значения от 0 до 2 n -1. Другие кодировки целочисленных значений для битовых комбинаций иногда используются, например , двоично-кодированной десятичной или код Грея , или в виде печатных кодов символов , таких как ASCII .
Существует четыре хорошо известных способа представления чисел со знаком в двоичной вычислительной системе. Наиболее распространенным является дополнение до двух , которое позволяет целочисленному типу со знаком с n битами представлять числа от −2 ( n −1) до 2 ( n −1) −1. Арифметика с дополнением до двух удобна тем, что существует идеальное взаимно однозначное соответствие между представлениями и значениями (в частности, нет отдельных +0 и -0), и потому , что сложение , вычитание и умножение не должны различать подписанные и беззнаковые типы. . Другие возможности включают двоичное смещение , величину знака и дополнение до единиц .
Некоторые компьютерные языки определяют целочисленные размеры машинно-независимым способом; другие имеют разные определения в зависимости от размера слова процессора. Не все языковые реализации определяют переменные всех целочисленных размеров, а определенные размеры могут даже не различаться в конкретной реализации. Целое число на одном языке программирования может иметь другой размер на другом языке или на другом процессоре.
Стандартные типы
Турбо-Паскаль имеет четыре встроенных стандартных типа: integer (целое), real (вещественное), boolean (логический) и char (символьный).
Целочисленный тип (integer)
В Турбо-Паскале имеется пять встроенных целочисленных типов: shortint (короткое целое), integer (целое), longint (длинное целое), byte (длиной в байт) и word (длиной в слово). Каждый тип обозначает определенное подмножество целых чисел, как это показано в следующей Таблице.
Встроенные целочисленные типы.
Тип |
Диапазон |
Формат |
shortint |
-128 ..+127 |
8 битов со знаком |
integer |
-32768 .. 32767 |
16 битов со знаком |
longint |
-2147483648 +2147483647 |
32 бита со знаком |
byte |
0 .. 255 |
8 битов без знака |
word |
0 .. 65535 |
16 битов без знака |
Арифметические действия над операндами целочисленного типа осуществляются в соответствии со следующими правилами:
- Тип целой константы представляет собой встроенный целочисленный тип с наименьшим диапазоном, включающим значение этой целой константы.
- В случае бинарной операции (операции, использующей два операнда), оба операнда преобразуются к их общему типу перед тем, как над ними совершается действие. Общим типом является встроенный целочисленный тип с наименьшим диапазоном, включающим все возможные значения обоих типов. Например, общим типом для целого и целого длиной в байт является целое, а общим типом для целого и целого длиной в слово является длинное целое. Действие выполняется в соответствии с точностью общего типа и типом результата является общий тип.
- Выражение справа в операторе присваивания вычисляется независимо от размера переменной слева.
Операции совершаемые над целыми числами:
“+” — сложение
“-“ — вычитание
“*” — умножение
SQR — возведение в квадрат
DIV — после деления отбрасывает дробную часть
MOD — получение целого остатка после деления
ABS — модуль числа
RANDOM(X)-получение случайного числа от 0 до Х
Пример:
а:=100; b:=60; a DIV b результат - 1 а MOD b результат - 40
Описываются переменные целого типа следующим образом:
var список переменных: тип;
Например: var а,р,n:integer;
Вещественный тип(real)
К вещественному типу относится подмножество вещественных чисел, которые могут быть представлены в формате с плавающей запятой с фиксированным числом цифр. Запись значения в формате с плавающей запятой обычно включает три значения — m, b и e — таким образом, что m*bе, где b всегда равен 10, а m и e являются целочисленными значениями в диапазоне вещественного типа. Эти значения m и e далее определяют диапазон и точность вещественного типа.
Имеется пять видов вещественных типов: real, singlе, duble, exnende, comp. Вещественные типы различаются диапазоном и точностью связанных с ними значений
Диапазон и десятичные цифры для вещественных типов
Тип |
Диапазон |
Цифры |
Real Single Duble Extende comp |
2.9×10Е-39 до 1.7×10Е 38 1.5×10Е-45 до 3.4×10Е 38 5.0×10Е-324 до 1.7×10Е 308 3.4×10Е-493 до 1.1×10Е 403 -2Е 63 до 2Е 63 |
от 11 до 12 от 7 до 8 от 15 до 16 от 19 до 20 от 19 до 20 |
Операции совершаемые над вещественными числами:
- Все операции допустимые для целых чисел.
- SQRT(x)-корень квадратный из числа х.
- SIN(X), COS(X), ARCTAN(X).
- LN(X)-натуральный логарифм.
- EXP(X)-экспонента Х (ех).
- EXP(X*LN(A))-возведение в степень (Ах).
- Функции преобразования типов:
- TRUNC(X)-отбрасывает дробную часть;
- ROUND(X)-округление.
- Некоторые правила арифметических операций:
- Если в арифметическом действии встречаются числа типа real и integer, то результат будет иметь тип real.
- Все составные части выражения записываются в одну строку.
- Используются только круглые скобки.
- Нельзя подряд ставить два арифметических знака.
Описываются переменные вещественного типа следующим образом:
var список переменных: тип;
Например:
var d,g,k:real;
Символьный тип(char)
K типу char относится любой символ заключенный в апострофы. Для представления апострофа как символьную переменную, надо заключить его в апостроф:’’’’.
Каждый символ имеет свой код и номер. Порядковые номера цифр 0,1..9 упорядочены по возрастанию. Порядковые номера букв также упорядочены по возрастанию, но не обязательно следуют друг за другом.
К символьным данным применимы знаки сравнения:
> , < , >=, <=, <> .
Например: ‘A’ < ‘W’
Функции, которые применимы к символьным переменным:
- ORD(X) — определяет порядковый номер символа Х.
Пример:
ord(‘a’)=97;
- CHR(X) — определяет символ по номеру.
Пример:
chr(97)=’a’;
- PRED(X) — выдает символ, стоящий перед символом Х.
Пример:
pred(‘B’)=’A’;
- SUCC(X) — выдает символ, следующий после символа Х.
Пример:
succ(‘A’)=’B’;
Пользовательские типы
Из совокупности пользовательских типов рассмотрим только
- перечисляемый тип;
- интервальный тип.
Эти два типа нам будут необходимы при изучении массивов.
Перечисляемый тип
Перечисляемый тип данных описывает новые типы данных, значения которых определяет сам программист. Перечисляемый тип задается перечислением тех значений, которые он может получать. Каждое значение именуется некоторым идентификатором и располагается в списке, обрамленном круглыми скобками. Перечисляемый тип относится к типам данных, определяемым пользователем, поэтому объявление этого типа начинается зарезервированным словом TYPE .
Формат перечисляемого типа:
Type
<имя типа>= (константа1, константа2,…, константаN);
где константа1, константа2,…, константаN – упорядоченный набор значений идентификаторов, рассматриваемых как константы.
Пример описания перечисляемого типа:
Type ball=(one, two, three, four, five); var t:ball;
Здесь ball – имя перечисляемого типа; one, two, three, four, five – константы; t – переменная, которая может принимать любое значение констант.
В перечисляемом типе константа является идентификатором, поэтому она не заключается в кавычки и не может быть числом. Таким образом, в перечисляемом типе под константой понимается особый вид констант, которые не могут быть:
- константами числового типа: 1, 2, 3, 4 и т. д;
- константами символьного типа: ‘a’, ‘s’, ‘1’, ‘3’ и т. д.;
- константами строкового типа: ‘first’, ‘second’ и т.д.
Кроме того, к значениям этого типа не применимы арифметические операции и стандартные процедуры ввода и вывода Read, Write .
Пример использования переменных перечисляемого типа:
Type days = (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday); Var day: days; begin if day = Sunday then writeln(‘Сегодня Воскресенье!’); End.
Элементы, входящие в определение перечисляемого типа, считаются упорядоченными в той последовательности, в которой они перечисляются. Нумерация начинается с нуля. Поэтому в приведенном примере дни недели имеют следующие порядковые номера
Для программного определения порядкового номера используется функция Ord() .
В нашем примере порядковые номера равны:
Ord(Monday) = 0;
Ord(Saturday) = 5;
Ord(Sunday) = 6.
Интервальный тип
Если какая-то переменная принимает не все значения своего типа, а только значения, содержащиеся в некотором диапазоне, то такой тип данных называется интервальным типом. Часто интервальный тип называют ограниченным типом и типом-диапазоном. Интервальный тип задается границами своих значений:
<минимальное значение>..<максимальное значение>
Здесь:
- два символа «..» рассматриваются как один символ, поэтому между ними недопустимы пробелы;
- левая граница диапазона не должна превышать его правую границу.
Интервальный тип относится к типам данных, определяемых пользователем, поэтому объявление этого типа начинается со служебного слова TYPE .
Пример описания интервального типа:
Type digit = 1..10; month = 1..31; lat = ’A’..’Z’;
Целочисленные типы
В C# определены девять целочисленных типов: char, byte, sbyte, short, ushort, int, uint, long и ulong. Но тип char применяется, главным образом, для представления символов и поэтому рассматривается отдельно. Остальные восемь
целочисленных типов предназначены для числовых расчетов. Ниже представлены их
диапазон представления чисел и разрядность в битах:
Тип | Тип CTS | Разрядность в битах | Диапазон |
---|---|---|---|
byte | System.Byte | 8 | 0:255 |
sbyte | System.SByte | 8 | -128:127 |
short | System.Int16 | 16 | -32768 : 32767 |
ushort | System.UInt16 | 16 | 0 : 65535 |
int | System.Int32 | 32 | -2147483648 : 2147483647 |
uint | System.UInt32 | 32 | 0 : 4294967295 |
long | System.Int64 | 64 | -9223372036854775808 : 9223372036854775807 |
ulong | System.UInt64 | 64 | 0 : 18446744073709551615 |
Как следует из приведенной выше таблицы, в C# определены оба варианта различных целочисленных типов: со знаком и без знака. Целочисленные типы со знаком отличаются от аналогичных типов без знака способом интерпретации старшего разряда
целого числа. Так, если в программе указано целочисленное значение со знаком, то компилятор C# сгенерирует код, в котором старший разряд целого числа используется в качестве флага знака. Число считается положительным, если флаг знака равен 0,
и отрицательным, если он равен 1.
Отрицательные числа практически всегда представляются методом дополнения до двух, в соответствии с которым все двоичные разряды
отрицательного числа сначала инвертируются, а затем к этому числу добавляется 1.
Вероятно, самым распространенным в программировании целочисленным типом является тип int. Переменные типа int нередко используются для управления циклами, индексирования массивов и математических расчетов общего назначения. Когда
же требуется целочисленное значение с большим диапазоном представления чисел, чем у типа int, то для этой цели имеется целый ряд других целочисленных типов.
Так, если значение нужно сохранить без знака, то для него можно выбрать тип uint, для
больших значений со знаком — тип long, а для больших значений без знака — тип
ulong. В качестве примера ниже приведена программа, вычисляющая расстояние от
Земли до Солнца в сантиметрах. Для хранения столь большого значения в ней используется переменная типа long:
Всем целочисленным переменным значения могут присваиваться в десятичной или шестнадцатеричной системе обозначений. В последнем случае требуется префикс 0x:
Если возникает какая-то неопределенность относительно того, имеет ли целое значение тип int, uint, long или ulong, то по умолчанию принимается int. Чтобы явно специфицировать, какой другой целочисленный тип должно иметь значение, к числу можно
добавлять следующие символы:
U и L можно также указывать в нижнем регистре, хотя строчную L легко зрительно спутать с цифрой 1 (единица).
Предупреждение насчет std::int8_t и std::uint8_t
По определенным причинам в C++ большинство компиляторов определяют и обрабатывают типы int8_t и uint8_t идентично типам char signed и char unsigned (соответственно), но это происходит далеко не во всех случаях. Следовательно, std::cin и std::cout могут работать не так, как вы ожидаете. Например:
#include <iostream>
#include <cstdint>
int main()
{
std::int8_t myint = 65;
std::cout << myint << std::endl;
return 0;
}
1 |
#include <iostream> intmain() { std::int8_t myint=65; std::cout<<myint<<std::endl; return; } |
На большинстве компьютеров с различными архитектурами результат выполнения этой программы следующий:
Т.е. программа, приведенная выше, обрабатывает как переменную типа char. Однако на некоторых компьютерах результат может быть следующим:
Поэтому идеальным вариантом будет избегать использования std::int8_t и std::uint8_t вообще (используйте вместо них std::int16_t или std::uint16_t). Однако, если вы все же используете std::int8_t или std::uint8_t, то будьте осторожны с любой функцией, которая может интерпретировать std::int8_t или std::uint8_t как символьный тип, вместо целочисленного (например, с объектами std::cin и std::cout).
Правило: Избегайте использования std::int8_t и std::uint8_t. Если вы используете эти типы, то будьте внимательны, так как в некоторых случаях они могут быть обработаны как тип char.
Символы
В C# символы представлены не 8-разрядным кодом, как во многих других языках
программирования, например , а 16-разрядным кодом, который называется юникодом (Unicode). В юникоде набор символов представлен настолько широко, что он охватывает символы практически из всех естественных языков на свете. Если для многих
естественных языков, в том числе английского, французского и немецкого, характерны
относительно небольшие алфавиты, то в ряде других языков, например китайском,
употребляются довольно обширные наборы символов, которые нельзя представить
8-разрядным кодом. Для преодоления этого ограничения в C# определен тип char,
представляющий 16-разрядные значения без знака в пределах от 0 до 65 535. При этом
стандартный набор символов в 8-разрядном коде ASCII является подмножеством юникода в пределах от 0 до 127. Следовательно, символы в коде ASCII по-прежнему остаются действительными в C#.
Для того чтобы присвоить значение символьной переменной, достаточно заключить это значение (т.е. символ) в одинарные кавычки:
Несмотря на то что тип char определен в C# как целочисленный, его не следует
путать со всеми остальными целочисленными типами. Дело в том, что в C# отсутствует автоматическое преобразование символьных значений в целочисленные и обратно.
Например, следующий фрагмент кода содержит ошибку:
Наравне с представлением char как символьных литералов, их можно представлять
как 4-разрядные шестнадцатеричные значения Unicode (например, ‘\u0041’), целочисленные значения с приведением (например, (char) 65) или же шестнадцатеричные значения (например, ‘\x0041’). Кроме того, они могут быть представлены в виде .