Что такое integer в информатике

Урок №31. Целочисленные типы данных: short, int и long

Обновл. 11 Сен 2021 |

На этом уроке мы рассмотрим целочисленные типы данных в языке С++, их диапазоны значений, операцию деления, а также переполнение (что это такое и примеры).

Целочисленные типы данных

Тип Минимальный размер
Символьный тип данныхchar1 байт
Целочисленный тип данныхshort2 байта
int2 байта (но чаще всего 4 байта)
long4 байта
long long8 байт

Примечание: Тип char — это особый случай: он является как целочисленным, так и символьным типом данных. Об этом детально мы поговорим на одном из следующих уроков.

Основным различием между целочисленными типами, перечисленными выше, является их размер, чем он больше, тем больше значений сможет хранить переменная этого типа.

Объявление целочисленных переменных

Объявление происходит следующим образом:

Диапазоны значений и знак целочисленных типов данных

Как вы уже знаете из предыдущего урока, переменная с n-ным количеством бит может хранить 2 n возможных значений. Но что это за значения? Это значения, которые находятся в диапазоне. Диапазон — это значения от и до, которые может хранить определенный тип данных. Диапазон целочисленной переменной определяется двумя факторами: её размером (измеряется в битах) и её знаком (который может быть signed или unsigned).

Целочисленный тип signed (со знаком) означает, что переменная может содержать как положительные, так и отрицательные числа. Чтобы объявить переменную как signed, используйте ключевое слово signed :

По умолчанию, ключевое слово signed пишется перед типом данных.

В некоторых случаях мы можем заранее знать, что отрицательные числа в программе использоваться не будут. Это очень часто встречается при использовании переменных для хранения количества или размера чего-либо (например, ваш рост или вес не может быть отрицательным).

Целочисленный тип unsigned (без знака) может содержать только положительные числа. Чтобы объявить переменную как unsigned, используйте ключевое слово unsigned :

1-байтовая целочисленная переменная без знака (unsigned) имеет диапазон значений от 0 до 255.

Обратите внимание, объявление переменной как unsigned означает, что она не сможет содержать отрицательные числа (только положительные).

Теперь, когда вы поняли разницу между signed и unsigned, давайте рассмотрим диапазоны значений разных типов данных:

Для нематематиков: Используем таблицу 🙂

Начинающие программисты иногда путаются между signed и unsigned переменными. Но есть простой способ запомнить их различия. Чем отличается отрицательное число от положительного? Правильно! Минусом спереди. Если минуса нет, значит число — положительное. Следовательно, целочисленный тип со знаком (signed) означает, что минус может присутствовать, т.е. числа могут быть как положительными, так и отрицательными. Целочисленный тип без знака (unsigned) означает, что минус спереди отсутствует, т.е. числа могут быть только положительными.

Что используется по умолчанию: signed или unsigned?

Так что же произойдет, если мы объявим переменную без указания signed или unsigned?

Тип По умолчанию
Символьный тип данныхcharsigned или unsigned (в большинстве случаев signed)
Целочисленный тип данныхshortsigned
intsigned
longsigned
long longsigned

Все целочисленные типы данных, кроме char, являются signed по умолчанию. Тип char может быть как signed, так и unsigned (но, обычно, signed).

В большинстве случаев ключевое слово signed не пишется (оно и так используется по умолчанию).

Программисты, как правило, избегают использования целочисленных типов unsigned, если в этом нет особой надобности, так как с переменными unsigned ошибок, по статистике, возникает больше, нежели с переменными signed.

Правило: Используйте целочисленные типы signed, вместо unsigned.

Переполнение

Вопрос: «Что произойдет, если мы попытаемся использовать значение, которое находится вне диапазона значений определенного типа данных?». Ответ: «Переполнение».

Переполнение (англ. «overflow») случается при потере бит из-за того, что переменной не было выделено достаточно памяти для их хранения.

На уроке №28 мы говорили о том, что данные хранятся в бинарном (двоичном) формате и каждый бит может иметь только 2 возможных значения ( 0 или 1 ). Вот как выглядит диапазон чисел от 0 до 15 в десятичной и двоичной системах:

Десятичная система Двоичная система
00
11
210
311
4100
5101
6110
7111
81000
91001
101010
111011
121100
131101
141110
151111

Как вы можете видеть, чем больше число, тем больше ему требуется бит. Поскольку наши переменные имеют фиксированный размер, то на них накладываются ограничения на количество данных, которые они могут хранить.

Примеры переполнения

Рассмотрим переменную unsigned, которая состоит из 4 бит. Любое из двоичных чисел, перечисленных в таблице выше, поместится внутри этой переменной.

«Но что произойдет, если мы попытаемся присвоить значение, которое занимает больше 4 бит?». Правильно! Переполнение. Наша переменная будет хранить только 4 наименее значимых (те, что справа) бита, все остальные — потеряются.

Например, если мы попытаемся поместить число 21 в нашу 4-битную переменную:

Десятичная система Двоичная система
2110101

Число 21 занимает 5 бит (10101). 4 бита справа (0101) поместятся в переменную, а крайний левый бит (1) просто потеряется. Т.е. наша переменная будет содержать 0101, что равно 101 (нуль спереди не считается), а это уже число 5, а не 21.

Теперь рассмотрим пример в коде (тип short занимает 16 бит):

Результат выполнения программы:

x was: 65535
x is now: 0

Что случилось? Произошло переполнение, так как мы попытались присвоить переменной x значение больше, чем она способна в себе хранить.

Для тех, кто хочет знать больше: Число 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, что и является нашим результатом.

Аналогичным образом, мы получим переполнение, использовав число меньше минимального из диапазона допустимых значений:

Результат выполнения программы:

x was: 0
x is now: 65535

Переполнение приводит к потере информации, а это никогда не приветствуется. Если есть хоть малейшее подозрение или предположение, что значением переменной может быть число, которое находится вне диапазона допустимых значений используемого типа данных — используйте тип данных побольше!

Правило: Никогда не допускайте возникновения переполнения в ваших программах!

Деление целочисленных переменных

В языке C++ при делении двух целых чисел, где результатом является другое целое число, всё довольно предсказуемо:

Но что произойдет, если в результате деления двух целых чисел мы получим дробное число? Например:

В языке C++ при делении целых чисел результатом всегда будет другое целое число. А такие числа не могут иметь дробь (она просто отбрасывается, не округляется!).

Правило: Будьте осторожны при делении целых чисел, так как любая дробная часть всегда отбрасывается.

Поделиться в социальных сетях:

Урок №30. Размер типов данных

Комментариев: 23

Всем доброго времени суток. Появился такой вопрос: для объявления без знакового числа, для плюсов, обязательно писать unsigned int X, есть ли сокращенная форма по типу uint X?

Может проще для запоминания было сказать, что тип signed (со знаком) использует 1 (старший бит в байте для записи этого самого знака и для самого числа остается 7 бит (это в случае 1-го байта, для 2- байт 15 и т.д.) и в 7 битах можно записать число не больше чем 128.
К примеру 10000000 это отрицательный ноль. 🙂 Но такого не бывает.

Для того, чтоб числа имели дробь при делении целых чисел можно приписать ноль после точкой. Например : 8.0/5.0 = 1.6

Только это уже совсем другая история)

Достаточно поставить точку одному из выражений. Например: 8. / 5 или 8 / 5.

Остальное компилятор сам подставит)

Вообще, с «железным» правилом «Никогда не допускайте возникновения переполнения в ваших программах!» — сильно погорячились. Потому что очень часто переполнение как раз помогает создать более простой и быстрый код.

Например, нужно много раз увеличивать переменную на 1 и циклически прокручивать все значения от 0 до 255. Писать условие «если равно 255, то присвоить 0» — совсем не нужно, это произойдёт само при прибавлении 1 к 255, если используется 1-байтовая беззнаковая.

Другой очень частый пример: вычисление разности двух значений миллисекундного таймера, чтобы замерить период времени. 4-байтовая переменная с таким таймером переполняется каждые 49 суток. Если система работает непрерывно, то такое может случаться. Когда считаем разность (новое значение таймера минус старое) — возможен случай, когда новое значение уже переполнилось (снова пошло с нуля), а старое ещё нет (огромное число). Но когда вычисляется разность, тут снова произойдёт переполнение (из-за того, что получилось отрицательное значение), и эти два переполнения оказывают взаимно компенсирующее действие, как будто их не было вообще. И разность всё равно будет верной. И не надо городить никаких хитрых алгоритмов.

Скорее всего это какой-то очень древний подход. Никогда не слышал подобного в универе.

Потому что это относится к числам с плавающей точкой. У них отдельный бит хранит знак. В целочисленных типах такого нигде (или почти нигде) нет.

unsigned используется для экономии памяти, это же очевидно. Если знак действительно не нужен за счет дополнительно освобожденного бита, можно увеличить диапазон значений в 2 раза, что в некоторых случаях позволит использовать более «экономные» типы данных.

Ну так нужно указывать другой тип переменной(не целое число). Тогда будет дробь.

Забавная история, почему этот урок так важен =)
В игре Civilization есть баг с механикой агрессии и миролюбия. Суть такова, что агрессивность цивилизации измерялась по шкале от 1 до 10. Девятки и десятки были у всяких Чингисханов, Монтесум и Сталиных, а у духовного пацифиста Махатмы Ганди была единичка. И ещё были модификаторы — строй «республика» уменьшает агрессивность на 1, «демократия» — на 2. Соответственно, сразу же, как только индусы открывали Демократию, у Ганди становилась агрессивность −1.

А теперь внимание. Эта переменная была однобайтная и строго неотрицательная(unsigned), от 0 до 255. Соответственно, агрессивность Махатмы Ганди становилась равна 255 из 10. Поэтому, построив у себя демократию, Ганди двигался рассудком, клепал ядрёные бомбы и умножал всех на ноль.

Действительно хороший пример 🙂 С unsigned нужно быть аккуратным.

Источник

Целые типы

Во Free Pascal определен ряд целых типов, различающихся между собой объемом отводимой под данные памяти. Чем больше памяти отводится, тем больший диапазон значений может принимать переменная данного типа.

На практике часто используется целочисленный тип integer, под который в зависимости от платформы отводится 2 или 4 байта.

Примеры часто используемых целых типов в Pascal

ТипДиапазон допустимых значенийОтводимая память, в байтах
shortint-128…1271
integer-32 768…32 7672
longint-2 147 483 648…2 147 483 6474
byte0…2551
word0…65 5352

Переменные целого типа могут принимать только целые значения, попытка присвоения им вещественного числа приводит к ошибке.

Целочисленные переменные в программе описываются следующим образом:

Операции над целыми типами, дающие в результате значение целого типа:

Пример. Пусть a = 17, b = 5. Тогда a div b дает 3, a mod b дает 2 (остаток от деления).

Операции над операндами целого типа выполняются правильно только при условии, что результат и каждый операнд не меньше минимального (крайнего левого) и не больше максимального (крайнего правого) значений диапазона. Например, в Паскале существует константа maxint, в которой содержится максимально допустимое значение для типа integer. Тогда при выполнении операций в программе должны соблюдаться следующие условия:

Процедуры inc и dec изменяют значение переданной в них переменной, они ничего не возвращают в программу. Это их важное отличие от функций succ и pred.

Следующие функции принимают в качестве аргументов значения вещественного типа, а возвращают значения целого типа:

trunc(x) – отбрасывание десятичных знаков после точки;
round(x) – округление до целого.

Пример. Пусть x = 4.7389. Тогда trunc ( x ) дает 4, round ( x ) дает 5.

Источник

Тип данных Integer (Visual Basic)

Комментарии

Тип данных Integer обеспечивает оптимальную производительность на 32-разрядных процессорах. Другие целочисленные типы загружаются в память и сохраняются в памяти с более низкой скоростью.

Значение по умолчанию для типа Integer — 0.

Присваивания литералов

вы можете объявить и инициализировать Integer переменную, назначив ей десятичный литерал, шестнадцатеричный литерал, восьмеричный литерал или (начиная с Visual Basic 2017) двоичный литерал. Если целочисленный литерал выходит за пределы диапазона Integer (то есть, если он меньше Int32.MinValue или больше Int32.MaxValue), возникает ошибка компиляции.

начиная с Visual Basic 2017, можно также использовать символ подчеркивания () в _ качестве разделителя цифр, чтобы улучшить удобочитаемость, как показано в следующем примере.

начиная с Visual Basic 15,5, можно также использовать символ подчеркивания () в _ качестве начального разделителя между префиксом и шестнадцатеричными, двоичными или восьмеричными цифрами. Пример:

Чтобы использовать символ подчеркивания в качестве начального разделителя, нужно добавить в файл проекта Visual Basic (*.vbproj) следующий элемент:

Числовые литералы также могут включать I символ типа для обозначения Integer типа данных, как показано в следующем примере.

Советы по программированию

Диапазон

При попытке присвоить целочисленной переменной значение, лежащее за пределами диапазона данного типа, возникает ошибка. При попытке задать дробное значение оно округляется вверх или вниз до ближайшего целого значения. Если число находится точно посередине между двумя целыми числами, значение округляется до ближайшего четного целого. Такое поведение минимизирует ошибки округления, происходящие от постоянного округления среднего значения в одном направлении. В следующем коде приведены примеры округления.

Источник

Pascal: Занятие №1. Часть 3: Типы данных в Паскаль

Типы данных в Паскале

Паскаль — это типизированный язык программирования. Это означает, что переменные, в которых хранятся данные, имеют определенный тип данных. Т.е. программе напрямую надо указать, какие данные могут храниться в той или иной переменной: текстовые данные, числовые данные, если числовые — то целочисленные или дробные, и т.п. Это необходимо в первую очередь для того чтобы компьютер «знал», какие операции можно выполнять с этими переменными и как правильно их выполнять.

Например, сложение текстовых данных, или как это правильно называется в программировании — конкатенация — это обычное слияние строк, тогда как сложение числовых данных происходит поразрядно, кроме того, дробные и целые числа складываются тоже по-разному. То же самое касается и других операций.

Рассмотрим наиболее распространенные в Pascal типы данных.

Целочисленные типы данных в Паскаль

ТипДиапазонТребуемая память (байт)
byte0..2551
shortint-128..1271
integer-32768.. 327672
word0..655352
longint-2147483648..21474836474

Нужно иметь в виду, что при написании программ в паскале integer (в переводе с англ. целое) является наиболее часто используемым, так как диапазон значений наиболее востребуем. Если необходим более широкий диапазон, используется longint (long integer, в переводе с англ. длинное целое). Тип byte в Паскале используется, когда нет необходимости работать с отрицательными значениями, то же самое касается и типа word (только диапазон значений здесь значительно больше).

Примеры того, как описываются (объявляются) переменные в Паскале:

program a1; var x,y:integer; <целочисленный тип>myname:string; <строковый тип>begin x:=1; y:=x+16; myname:=’Петр’; writeln (‘имя: ‘,myname, ‘, возраст: ‘, y) end.

program a1; begin var x, y: integer; <целочисленный тип>var myname: string; <строковый тип>x := 1; y := x + 16; myname := ‘Петр’; print($’имя: , возраст: ‘) end.

Результат:
имя: Петр, возраст: 17

Комментарии в Паскале

[Название файла: L1task5.pas ]

Вещественные типы данных в Паскаль

Вещественные числа в Паскале и вообще в программировании — это название дробных чисел.

Тип real в Паскале — наиболее часто используемый из вещественных типов.

Выше были представлены простые типы данных в Паскаль, к которым относятся:

Для вывода значений переменных вещественного типа обычно используется форматированный вывод:

Наряду с простыми типами в языке еще используются структурированные типы данных и указатели, которым будут посвящены последующие уроки по Паскалю.

Константы в Паскале

Зачастую в программе заранее известно, что переменная будет принимать какое-то конкретное значение и не менять его на протяжении выполнения всей программы. В таком случае необходимо использовать константу.

Объявление константы в Паскале происходит до объявления переменных (до служебного слова var ) и выглядит следующим образом:

Пример описания константы в Паскале:

PascalPascalABC.NET

const x=17; var myname:string; begin myname:=’Петр’; writeln (‘имя: ‘,myname, ‘, возраст: ‘, х) end.

const x = 17; begin var myname := ‘Петр’; print($’имя: , возраст: ‘) end.

«Красивый» вывод целых и вещественных чисел

Для того чтобы после вывода значений переменных оставались отступы, чтобы значения не «сливались» друг с другом, принято через двоеточие указывать какое количество символов нужно предусмотреть для вывода значения:

Что такое integer в информатике. Смотреть фото Что такое integer в информатике. Смотреть картинку Что такое integer в информатике. Картинка про Что такое integer в информатике. Фото Что такое integer в информатике

Что такое integer в информатике. Смотреть фото Что такое integer в информатике. Смотреть картинку Что такое integer в информатике. Картинка про Что такое integer в информатике. Фото Что такое integer в информатике

Вывод вещественных чисел

Арифметические операции в Паскале

PascalPascalABC.NET
ДЕЙСТВИЕРЕЗУЛЬТАТСМЫСЛ
2 + 35плюс
4 — 13минус
2 * 36умножить
17 div 53целочисленное деление
17 mod 52остаток от целочисленного деления

Что такое integer в информатике. Смотреть фото Что такое integer в информатике. Смотреть картинку Что такое integer в информатике. Картинка про Что такое integer в информатике. Фото Что такое integer в информатике

Порядок выполнения операций

Что такое integer в информатике. Смотреть фото Что такое integer в информатике. Смотреть картинку Что такое integer в информатике. Картинка про Что такое integer в информатике. Фото Что такое integer в информатике

var a: integer; b: real; begin a := 1; writeln(‘a := 1; a = ‘,a); a += 2; // Увеличение на 2 writeln(‘a += 2; a = ‘,a); a *= 3; // Умножение на 3 writeln(‘a *= 3; a = ‘,a); writeln; b := 6; writeln(‘b := 6; b = ‘,b); r /= 2; writeln(‘b /= 2; b = ‘,b); end.

Стандартные арифметические процедуры и функции Pascal

Здесь стоит более подробно остановиться на некоторых арифметических операциях.

Пример операции inc:

Более сложное использование процедуры inc:
Inc(x,n) где x — порядкового типа, n — целого типа; процедура inc увеличивает x на n.

Пример использования функции odd:

begin WriteLn(Odd(5)); WriteLn(Odd(4)); end.

Пример использования процедуры sqr в Pascal:

var x:integer; begin x:=3; writeln(sqr(x)); <ответ 9>end.

Однако в компиляторе pascal abc возведение в степень осуществляется значительно проще:

Пример использования процедуры sqrt в Pascal:

var x:integer; begin x:=9; writeln(sqrt(x)); <ответ 3>end.

Источник

Pascal-Паскаль

Программирование. Числовые типы данных Pascal-Паскаль

Программирование. Числовые типы данных Pascal-Паскаль

Числовые типы данных Pascal-Паскаль

Наиболее распространенные в математике числовые типы – это целые числа, которые представляют бесконечное множество дискретных значений, и действительные числа, которые представляют неограниченный континуум значений.

Описание числовых типов данных (целые) Паскаля

В пределах одного языка могут быть реализованы различные подмножества множества целых чисел. Диапазон возможных значений целых числовых типов зависит от их внутреннего представления, которое может занимать один, два или четыре байта. Так, в Паскале 7.0 используются следующие целые числовые типы данных:

Числовые типы данных (ЦЕЛЫЕ ТИПЫ) Паскаля
Название числового типа данныхДлина, байт числового типа данныхДиапазон значений числового типа данных
Byte10..255
ShortInt1-128..+127
Word20..65535
Integer2-32768..+32767
LongInt4-2 147 483 648..+2 147 483 647

С целыми числовыми типами данных Паскаля можно выполнять следующие операции:

В Паскале используются следующие типы вещественных чисел, которые определяют произвольное число лишь с некоторой конечной точностью, зависящей от внутреннего формата вещественного числа:

При описании вещественной переменной типа real в памяти компьютера будет создана переменная размерностью 4 байта. При этом 3 байта будут отданы под мантиссу, а один – под порядок.

Над действительными числовыми типами данных можно выполнять следующие операции:

Исходники Pascal (127)

Справочник

Справочник по паскалю: директивы, функции, процедуры, операторы и модули по алфавиту

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *