Какие основные типы данных используются при программировании на компьютере
Welcome! Никак руки не доходили сделать эту статью, но теперь я её пишу.
Типы данных - одна из важнейших частей языка. Переменные, функции, поля класса и даже другие типы данных - ничто без данных. Без данных: перменная уже не хранит значение, а функция его не возвращает. Но что такое данные? Почему всё держится именно на них? Зачем данные разделяют на типы? И почему int ≠ 4 байта?
Хочешь узнать ответы? Бегом под кат!
Типы данных
Поговорим про типы данных в языках программирования. Они делятся на две категории: примитивные типы и ссылочные типы. В статье рассмотрим каждую из категорий.
Классификация типов данных в С++
Современные языки программирования, как правило, могут иметь набор простых типов, являющихся встроенными в данный язык программирования , и средства для создания производных типов.
Объектно-ориентированные языки программирования позволяют определять типы класса.
Реализация простых типов данных заключается в способе представления значений данного типа в компьютере и в наборе операций, поддерживаемых для данного типа.
Тип данных определяет размер памяти, выделяемой под переменную данного типа при ее создании. Язык программирования C++ поддерживает следующие типы данных (рис. 1.1).
- Базовые типы. Базовые типы предопределены стандартом языка , указываются зарезервированными ключевыми словами и характеризуются одним значением. Их не надо определять и их нельзя разложить на более простые составляющие без потери сущности данных. Базовые типы объектов создают основу для построения более сложных типов .
- Производные типы. Производные типы задаются пользователем, и переменные этих типов создаются как с использованием базовых типов, так и типов классов.
- Типы класса. Экземпляры этих типов называются объектами.
Существует четыре спецификатора типа данных, уточняющих внутреннее представление и диапазон базовых типов:
Рассмотрим более подробно базовые типы данных .
Что такое данные?
- Что такое данные?
Казалось бы. Это все лишь вопрос. Как он связан с данными? Но всё не так просто.
Когда человек задаёт вопрос: он передаёт информацию, а другой человек получает информацию. Когда прозвучит ответ: человек задавший вопрос получит информацию, а человек ответивший на него передаст информацию.
Это называется обмен данными. Но что сдесь данные? Давайте заглянем в терминологию:
5.3. Булевы типы. Булева алгебра
5.3.1. Булева алгебра: введение
Булева алгебра - это раздел математики, изучающий операции с логическими данными, то есть данными, принимающие значения: "Истина" и "Ложь" (по-английски: "true" и "false"). Эта дисциплина была разработана английским математиком XIX века Джорджем Булем, имя которого она носит.
К булевым операциям (которые в русскоязычной литературе чаще называют логическими операциями) относятся:
- конъюнкция (логическое "И");
- дизъюнкция (логическое "ИЛИ");
- отрицание (логическое "НЕ");
- логическое " исключающее ИЛИ ";
- логическая "эквивалентность";
- логическое "следствие".
Из этих логических операций первые три операции присутствуют практически во всех языках программирования, а последние две - только в языках логического программирования (и то не во всех). При этом операция логического "НЕ" - унарная операция , применимая к следующей за ней переменной, а остальные операции - бинарные (применимые к паре значений: предыдущему и последующему). Результаты логических операций представлены [в таблице 5.4]. В ней же представлены обозначения этих операций в математике, языках Quick Basic, C/C++, Java.
5.3.2. Булевы типы
Как уже сказано выше, логические выражения могут принимать только два значения: "false" (ложь) и "true" (истина). Эти значения-константы определены следующим образом:
Логично использовать для этих констант целое число разрядностью 1 бит, но. Поскольку минимальным размером регистра, отводимого под целое число, является 1 байт, то именно ячейка памяти этого размера служит для хранения числа с типом данных: "Boolean". На самом деле размер этого типа данных может составлять 2 или даже 4 байта. Это связано со следующими обстоятельствами.
В основном стандарте для языка Си: ANSI C, - отсутствует булевский тип данных. Вместо него используется целый тип данных: integer (int). Этот тип данных реализован в различных компиляторах по-разному, и занимает от 2-х до 4-х байтов. Константе "ложь" ("FALSE") соответствует значение; "0", а любое ненулевое значение воспринимается как "истина". Это позволяет написать на языке Си компактный код, например:
Описывает цикл "Пока", завершающийся при достижении конца файла, связанного с потоком stream. Информацию по потокам и окончанию файлов смотрите в следующих лекциях.
Не смотря на несоответствие стандарту ANSI C, в стандартной библиотеке Windows API для языков Си/Си плюс-плюс введен тип BOOL, являющегося реализацией булевского типа данных. Тип данных: "Boolean" также введен в стандартах на C++ и Java.
Булевский тип данных отсутствует в Quick Basic и более старых реализациях языка Basic, но присутствует в языке Visual Basic и его "клонах".
Примечание: при вычислении булевских выражений часто не требуется принудительно приводить значения логических выражений логической переменной .
Данные, с которыми работает программа, хранятся в оперативной памяти. Компилятору необходимо точно знать, сколько места они занимают, как именно закодированы и какие действия с ними можно выполнять. Все это задается при описании данных с помощью типа. Тип данных однозначно определяет:
- внутреннее представление данных, а следовательно и множество их возможных значений;
- допустимые действия над данными (операции и функции).
Например, целые и вещественные числа, даже если они занимают одинаковый объем памяти, имеют совершенно разные диапазоны возможных значений; целые числа можно умножать друг на друга, а, например, символы — нельзя. Каждое выражение в программе имеет определенный тип. Компилятор использует информацию о типе при проверке допустимости описанных в программе действий.
Классификация типов
Рассмотрим классификацию типов в таблица 1.2.
Стандартные типы не требуют предварительного определения. Для каждого типа существует ключевое слово, которое используется при описании переменных, констант и т. д. Если же тип данных определяет сам программист, он описывает его характеристики и дает ему имя, которое затем применяется точно так же, как имена стандартных типов. Описание собственного типа данных должно задавать всю информацию, необходимую для его использования: внутреннее представление и допустимые действия.
ПРИМЕЧАНИЕ Типы, выделенные в таблица 1.2 полужирным шрифтом, объединяются термином 'порядковые'. Этот термин рассмотрен далее в этой лекции.
Стандартные типы данных
Логические типы
Внутреннее представление. Основной логический тип данных Паскаля называется boolean . Величины этого типа занимают в памяти 1 байт и могут принимать всего два значения: true (истина) или false (ложь). Внутреннее представление значения false — 0 (нуль), значения true — 1.
Операции. К величинам логического типа применяются логические операции and , or , xor и not ( таблица 1.3). Для наглядности вместо значения false в таблице используется 0, а вместо true — 1.
Операция and называется ' логическое И ', или логическое умножение. Ее результат имеет значение true , только если оба операнда имеют значение true .
Результат операции or ( логическое ИЛИ, логическое сложение) имеет значение true , если хотя бы один из операндов имеет значение true . Например, false or true true , true or true true .
Операция xor — так называемое исключающее ИЛИ, или операция неравнозначности. Ее результат истинен, когда значения операндов не совпадают.
Логическое отрицание not является унарной операцией, то есть имеет один операнд, который и инвертирует. Например, not true даст в результате false .
Величины логического типа можно сравнивать между собой с помощью операций отношения, перечисленных в таблица 1.4. Результат этих операций имеет логический тип.
Целые типы
Внутреннее представление. Целые числа представляются в компьютере в двоичной системе счисления. В Паскале определены несколько целых типов данных, отличающиеся длиной и наличием знака: старший двоичный разряд либо воспринимается как знаковый, либо является обычным разрядом числа ( таблица 1.5). Внутреннее представление определяет диапазоны допустимых значений величин (от нулей до единиц во всех двоичных разрядах).
Операции.С целыми величинами можно выполнять арифметические операции ( таблица 1.6). Результат их выполнения всегда целый (при делении дробная часть отбрасывается).
К целым величинам можно также применять операции отношения, а также поразрядные операции and , or , xor и not . При выполнении этих операций каждая величина представляется как совокупность двоичных разрядов. Действие выполняется над каждой парой соответствующих разрядов операндов: первый разряд с первым, второй — со вторым, и т. д. Например, результатом операции 3 and 2 будет 2, поскольку двоичное представление числа 3 — 11, числа 2 — 10.
Для работы с целыми величинами предназначены также операции сдвига влево shl и вправо shr . Слева от знака операции указывается, с какой величиной будет выполняться операция, а справа — на какое число двоичных разрядов требуется сдвинуть величину. Например, результатом операции 12 shr 2 будет значение 3, а выполнив операцию 12 shl 1 , то есть сдвинув это число влево на 1 разряд, получим 24. Освободившиеся при сдвиге влево разряды заполняются нулями, а при сдвиге вправо — знаковым разрядом.
Стандартные функции и процедуры.К целым величинам можно применять стандартные функции и процедуры, перечисленные в таблица 1.7 (в тригонометрических функциях угол задается в радианах).
Аннотация: В лекции рассматриваются понятие типов данных в языках программирования, приводится классификация типов данных в С++, излагаются особенности представления базовых типов и операций над ними, рекомендации и правила выполнения операции преобразования базовых типов в С++.
Цель лекции: изучить классификацию типов и их внутреннее представление в языке С++, научиться работать со стандартными и пользовательскими типами .
Основная цель любой программы состоит в обработке каких-либо данных, например, чисел или текстов. Данные могут быть различного вида или типа и, в зависимости от этого, с ними можно выполнять разные действия.
В любом языке программирования каждая константа, переменная , результат вычисления выражения или функции должны иметь определенный тип данных .
Тип данных – это множество допустимых значений, которые может принимать тот или иной объект , а также множество допустимых операций, которые применимы к нему. В современном понимании тип также зависит от внутреннего представления информации.
Таким образом, данные различных типов хранятся и обрабатываются по-разному. Тип данных определяет:
- внутреннее представление данных в памяти компьютера;
- объем памяти, выделяемый под данные;
- множество (диапазон) значений, которые могут принимать величины этого типа;
- операции и функции, которые можно применять к данным этого типа.
Исходя из данных характеристик, необходимо определять тип каждой величины, используемой в программе для представления объектов. Обязательное описание типа позволяет компилятору производить проверку допустимости различных конструкций программы. От выбора типа величины зависит последовательность машинных команд, построенная компилятором.
Зачем нужны данные? (Где используются данные?)
Теперь, когда мы знаем что такое данные, мы должны узнать с чем их едят.
На самом деле, данные используются везде. И сейчас, то, что ты читаешь - это данные. А на вид и не скажешь. Вы думали что данные - это единицы, да нолики? А вот и нет. Это ещё и двойки. 2
Почему всё держится именно на данных
Из прошлого предложения можно понять: "Все - есть данные". Соответсвенно на них же всё и держится. Когда мы создаём переменную: мы передаём в неё данные.
- Но что если мы передадим в переменную. Другую переменную?
- Ага, то есть, перменная это тоже данные?
Да, всё именно так.
- А что будет, если мы создадим пустую переменную? Мы же не передаём в неё данные?
Хорошо, давай попробуем.
Чему тогда равна переменная? Нулю? Пустоте(void)? А вот и нет.
Выходит в переменной есть данные. Но какие? Это мы должны спросить у конкретных типов данных. Например в int по стандарту(в C++) помещается значение одного из адрессов оперативной памяти.
- Но какого адресса? Он же не случайный?
Нет, конечно. Когда мы создаём переменную: под неё выделяется память, и значение которое было по адрессу нашей новой переменной, присваевается переменной.
- Хмм, хорошо. А что ты скажешь по поводу void? Это же пустота. В void 0 байт. Void ничему не равен.
Хах, давай проверим.
- Стоп, что? Но void же ничему не равен! Как он занимает 1 байт?
На самом деле тут нет ничего странного. Любая переменная в C++ хранится в ОЗУ. И void тоже. Соответственно, void должна что-то хранить. Но что она хранит - мы не можем узнать. Так как void хранит значение, мы можем получить адресс void переменной.
5.1. Примитивные (машинные) типы данных
Как уже говорилось выше, почти во всех языках программирования выделяются "машинные" типы данных. Вкратце объясним их происхождение.
Как известно из школьных учебников по информатике [36, 54, 53, 35], любое число, любые символы, любые объекты в памяти ЭВМ представляются в виде последовательности нулей и единиц - битов. Бит (от английского Binary digIT ) является единицей информации, принимающей одно из двух значений: "0" и "1". Поскольку бит - очень малая величина, информацию обычно выражают в байтах или кратных ему числе битов. Один байт соответствует восьми битам. Иначе говоря, в одном байте можно закодировать 256 (2^8) символов, представить целые числа без знака от 0 до 255, или представить целые числа со знаком от -128 до +127. Заметим, что все символы в компьютере представлены в виде целых чисел без знака.
Отступление. В середине 70-х годов XX века ученые подсчитали, что человеческий мозг вмещает в себя ~10^18 бит информации. Это число соответствовало в то время всей информации, содержащейся в библиотеке им. В.И. Ленина. В переводе на современный компьютерный язык это соответствует приблизительно одному экзабайту - миллиону гигабайт информации, что приближенно равно объему одной крупной распределенной базы данных бронирования авиабилетов и авиаперевозок (по оценкам автора). Почему же возможности мозга человека превышают возможности "компьютерного" интеллекта? Дело в том, что человеческий мозг может удерживать в своей памяти, по аналогии с кошельком, как "медные монеты" - необработанные записи, последовательности букв и цифр, так и "золотые монеты" - сложные, обработанные данные, в виде готовых концепций, теорем и т.д. Это делает мозг более "гибкой" системой, чем компьютер (позволяя, путем "сжатия с потерями" уменьшать объем информации в 100 и более раз).
Итак, все данные в ЭВМ представляются в виде одного или нескольких битов. Тогда напрашивается вопрос: "А откуда в языках программирования такое большое число машинных типов данных, если все кодируется битами?" Автор отвечает: количество машинных типов данных определяется количеством регистров и их типом в центральном процессоре ЭВМ. Регистр можно представить как "сверхоперативную", быструю, встроенную в центральный процессор память . Эти регистры имеют длину 1 байт , 2 байта ("полуслово", " слово "), 4 байта (" слово ", "двойное слово ") и 8 байт ("двойное слово "). Изредка используются и более длинные регистры (например, для хранения [чисел с плавающей точкой] повышенной разрядности).
Помимо своего размера (так называемой разрядности) регистров различают также назначение регистра и формат хранимых в нем данных. Подробнее о машинных типах данных смотри этот раздел ниже.
Целочисленный (целый) тип данных (тип int)
Переменные данного типа применяются для хранения целых чисел ( integer ). Описание переменной , имеющей тип int , сообщает компилятору, что он должен связать с идентификатором (именем) переменной количество памяти, достаточное для хранения целого числа во время выполнения программы.
Границы диапазона целых чисел, которые можно хранить в переменных типа int , зависят от конкретного компьютера, компилятора и операционной системы (от реализации). Для 16-разрядного процессора под него отводится 2 байта, для 32-разрядного – 4 байта.
Для внутреннего представления знаковых целых чисел характерно определение знака по старшему биту (0 – для положительных, 1 – для отрицательных). Поэтому число 0 во внутреннем представлении относится к положительным значениям. Следовательно, наблюдается асимметрия границ целых промежутков.
В целочисленных типах для всех значений определены следующий и предыдущий элементы. Для максимального следующим значением будет являться минимальное в этом же типе, предыдущее для минимального определяется как максимальное значение . То есть целочисленный диапазон условно можно представить сомкнутым в кольцо. Поэтому определены операции декремента для минимального и инкремента для максимального значений в целых типах .
От количества отводимой под объект памяти зависит множество допустимых значений, которые может принимать объект :
- short int – занимает 2 байта, следовательно, имеет диапазон от –32 768 до +32 767;
- int – занимает 4 байта, следовательно, имеет диапазон от –2 147 483 648 до +2 147 483 647;
- long int – занимает 4 байта, следовательно, имеет диапазон от –2 147 483 648 до +2 147 483 647;
- long long int – занимает 8 байтов, следовательно, имеет диапазон от –9 223 372 036 854 775 808 до +9 223 372 036 854 775 807.
Модификаторы signed и unsigned также влияют на множество допустимых значений, которые может принимать объект :
- unsigned short int – занимает 2 байта, следовательно, имеет диапазон от 0 до 65 535;
- unsigned int – занимает 4 байта, следовательно, имеет диапазон от 0 до 4 294 967 295;
- unsigned long int – занимает 4 байта, следовательно, имеет диапазон от 0 до 4 294 967 295;
- unsigned long long int – занимает 8 байтов, следовательно, имеет диапазон от 0 до 18 446 744 073 709 551 615.
Приведем несколько правил, касающихся записи целочисленных значений в исходном тексте программ.
- Нельзя пользоваться десятичной точкой. Значения 26 и 26.0 одинаковы, но 26.0 не является значением типа int .
- Нельзя пользоваться запятыми в качестве разделителей тысяч. Например, число 23,897 следует записывать как 23897.
- Целые значения не должны начинаться с незначащего нуля. Он применяется для обозначения восьмеричных или шестнадцатеричных чисел, так что компилятор будет рассматривать значение 011 как число 9 в восьмеричной системе счисления .
На практике рекомендуется использовать основной целый тип , то есть тип int . Данные основного целого типа практически всегда обрабатываются быстрее, чем данные других целых типов. Короткий тип short подойдет для хранения больших массивов чисел с целью экономии памяти при условии, что значения элементов не выходят за предельные границы для этих типов. Длинные типы необходимы в ситуации, когда не достаточно типа int .
Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы
Вещественный (данные с плавающей точкой) тип данных (типы float и double)
Для хранения вещественных чисел применяются типы данных float (с одинарной точностью) и double (с двойной точностью). Смысл знаков "+" и "-" для вещественных типов совпадает с целыми. Последние незначащие нули справа от десятичной точки игнорируются. Поэтому варианты записи +523.5, 523.5 и 523.500 представляют одно и то же значение .
Для представления вещественных чисел используются два формата:
В большинстве случаев используется тип double , он обеспечивает более высокую точность , чем тип float . Максимальную точность и наибольший диапазон чисел достигается с помощью типа long double .
Величина с модификатором типа float занимает 4 байта. Из них 1 бит отводится для знака, 8 бит для избыточной экспоненты и 23 бита для мантиссы . Отметим, что старший бит мантиссы всегда равен 1, поэтому он не заполняется, в связи с этим диапазон модулей значений переменной с плавающей точкой приблизительно равен от 3.14E–38 до 3.14E+38.
Величина типа double занимает 8 байтов в памяти. Ее формат аналогичен формату float . Биты памяти распределяются следующим образом: 1 бит для знака, 11 бит для экспоненты и 52 бита для мантиссы . С учетом опущенного старшего бита мантиссы диапазон модулей значений переменной с двойной точностью равен от 1.7E–308 до 1.7E+308.
Примитивные типы данных
Примитивные типы данных — это базовые типы данных языка программирования. Их ключевая особенность в том, что данные в них, в отличие от ссылочных типов, располагаются непосредственно [«в переменной».] на участке памяти компьютера в котором находится переменная. Перечислим и опишем основные примитивные типы данных в программировании.
Ключевая особенность примитивных типов данных в том, что они передаются по значению. Это значит, что при передачи переменной в качестве аргумента функции (или методу) она копируется туда. Следовательно манипуляции, производимые с переменной в вызванной функции, никак не повлияют на значение переменной в вызывающей функции.
Примечание: модификатор unsigned (то есть беззнаковый) применим к любому целочисленному типу (в том числе и к символьному), а long (длинный) применим практически к любому типу, за исключением логического.
Что такое данные?
- Что такое данные?
Казалось бы. Это все лишь вопрос. Как он связан с данными? Но всё не так просто.
Когда человек задаёт вопрос: он передаёт информацию, а другой человек получает информацию. Когда прозвучит ответ: человек задавший вопрос получит информацию, а человек ответивший на него передаст информацию.
Это называется обмен данными. Но что сдесь данные? Давайте заглянем в терминологию:
Ссылочные типы данных
Самая важная особенность ссылочных типов данных состоит в том, что они передаются не по значению, а по ссылке. Что это значит?
Ссылочные типы данных не являются примитивными и их размер не фиксирован и может быть произвольным, кроме того они хранятся не [«в переменной».] на участке памяти переменной, а в совершенно другом месте памяти компьютера. Ссылочными типами, например, являются массивы. В объектно-ориентированных языках программирования — это экземпляры классов, коллекции и т.п.
Аннотация: В данной лекции Вы познакомитесь с основными типами "машинных данных" и допустимыми операциями над ними. Вы также узнаете разницу между "машинными" и "пользовательскими" типами данных.
"Программа = Алгоритм + Структура данных"
Цель лекции:
- Познакомиться с основными типами данных и научиться использовать их.
- Познакомиться с операциями над типами данных.
- Изучить особенности каждого типа данных.
Как уже указывалось в эпиграфе, в этой лекции будет подробно рассказано о типах данных - константах, переменных и т.п., используемых при программировании на любом языке. Правильно выбранный тип данных влияет не только на реализацию тех или иных алгоритмов - от него также зависит эффективность реализации алгоритма, скорость вычислений, размер программы, точность расчетов и т.п.
Следует отметить, что концепция типов данных не реализована в таких языках, как Perl, Visual Basic Script ( VBScript ), не полностью реализована в Quick Basic , Visual Basic и т.п. Именно поэтому не рекомендуется использовать эти языки для начинающих изучать программирование .
Типы данных в таких языках, как C, C++, Java можно принудительно приводить к определенному типу. В этих языках автор советует так и поступать - если потребуется, применять принудительное приведение типов , а не ограничиваться приведением по-умолчанию. В противном случае могут возникнуть ошибки, например: "Не могу привести тип ' unsigned char *' в 'const char *'".
Зачем данные делят на типы?
Для начала, давайте разберёмся, что такое тип данных?
Тип данных — допустимое множество значений.
Это один из вариантов того, как можно описать данный термин. Этот вариант хорошо подходит для этой статьи, because я расказываю только о простых типах данных, а они как раз таки и являются множеством допустимых значений.
Для пользовательских типов данный (ака классы) лучше использовать этот вариант.
Тип данных — класс данных, характеризуемый членами класса и операциями, которые могут быть к ним применены.
- Хорошо. Мы знаем что такое тип данных. А зачем эти типы нужны?
Ответ на данный вопрос есть. Принадлежит он, конечно, не мне.
Наверное, вам известно, что в памяти компьютера все числа хранятся в виде последовательности 0 и 1. Так вот, для того чтобы записать любое число только ноликами и единичками существуют определённые правила. Эти правила довольно сильно отличаются для целых чисел и для вещественных чисел. В памяти компьютера числа "3" и "3.0" будут записаны совершенно по-разному.
int ≠ 4 байта. Почему?
Ответ на этот вопрос предельно прост. Размер и числовой диапазон типов данных задаётся процессором. Соответсвенно размер int зависит от процессора в комьютере. Для 16 битный процессоров - это 2 байта (short int), для 32 и 64 битных - 4 байта (long int). Правда это не всегда так. "Но почему?", - спросите вы меня. А ответа я не дам. Попробуйте найти ответ сами ;)
5.2. Целые числа и целочисленная арифметика
5.2.1. Целый тип
Наиболее простыми в реализации и "очевидными" с точки зрения " здравого смысла " являются целочисленные типы данных. Они представляют собой запись чисел в "двоичном" формате, в виде последовательности нулей и единиц. Различают два вида целых чисел: "целые без знака" и "целые со знаком".
Тип данных "целые без знака" представляют собой натуральный ряд чисел, которые начинаются с "0" (а не с "1", как в математике!) и продолжаются вплоть до исчерпания разрядности регистра.
Тип данных "целые со знаком" содержат в старшем бите (по-другому - в самом "левом", первом по порядку бите) признак знака. Если этот бит имеет значение: "0", то число считается положительным, если "1" - отрицательным числом.
Примечание: отрицательные числа представляют в ЭВМ в виде дополнительного кода . Подробнее о дополнительном коде смотри, например, [62], а также школьные учебники по информатике [35, 36, 53, 54].
В таблице 5.1 представлены максимальное (max) и минимальное (min) значения, применяемые числами в целочисленных регистрах различной разрядности для типов "целые со знаком" и "целые без знака". Между этими максимальными и минимальными значениями могут принимать целочисленные значения константы и переменные указанных типов.
В таблице 5.2 дается соответствие между разрядностями целочисленных регистров и связанными с ними обозначениями типов на языках Quick Basic, C/C++, Java. В этой же таблице приведены "псевдонимы" "машинных" типов данных, применяемых в библиотеке Windows API. Подробнее о Windows API смотри в книгах 90.
5.2.2. Целочисленная арифметика
С целочисленными типами данных возможны следующие операции:
- сложение;
- вычитание;
- умножение;
- целочисленное деление;
- нахождение остатка от деления;
- смена знака числа;
- инкремент числа;
- декремент числа;
- а также все операции отношения .
Все эти операции, их обозначения, действия, а также приоритеты операций и комментарии к ним смотри таблицу 5.3.
5.2.3. Особые ситуации при работе с целыми числами
Целочисленная арифметика генерирует следующие ошибки [39,40], вызывает так называемые программные прерывания :
- деление на ноль ( divide by zero);
- переполнение ( overflow ) - попытка записать в регистр целое число с разрядностью, превышающей разрядность регистра, например: short i = 2000000 или unsigned short u=-1;
- исчезновение знака - прерывание, указывающее, что в старший бит регистра (то есть в признак знака) был перенос единицы из следующего за ним разряда (бита). Соответствует прерыванию "переполнение", но для целых чисел со знаком.
5.2.4. Замечания о целочисленном делении
Замечание по целочисленному делению. Целочисленное деление отличается от "обычного математического" деления в том, что при целочисленном делении происходит "отбрасывание" дробной части результата, например:
- 2/3 = 0;
- 3/3 = 1;
- 4/3 = 1;
- 5/3 = 1;
- 6/3 = 2;
- и т.д.
На практике это приводит к большим ошибкам округления при расчетах. Но иногда следует использовать только целочисленную арифметику. Например, при выдаче информации на экран дисплея в "графическом" виде по-умолчанию используется (во всяком случае, в библиотеке Windows API) только целочисленные значения. Для этих целей использование целочисленной арифметики - "естественно".
- use integer - для включения целочисленной арифметики;
- no integer - для выключения целочисленной арифметики.
Читайте также: