Что значит целочисленное значение

Какие числа называются целыми

Что значит целочисленное значение. Смотреть фото Что значит целочисленное значение. Смотреть картинку Что значит целочисленное значение. Картинка про Что значит целочисленное значение. Фото Что значит целочисленное значение

Определение целых чисел

Что важно знать о целых числах:

Целые числа на числовой оси выглядят так:

Что значит целочисленное значение. Смотреть фото Что значит целочисленное значение. Смотреть картинку Что значит целочисленное значение. Картинка про Что значит целочисленное значение. Фото Что значит целочисленное значение

На координатной прямой начало отсчета всегда начинается с точки 0. Слева находятся все отрицательные целые числа, справа — положительные. Каждой точке соответствует единственное целое число.

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

Натуральные числа — это целые, положительные числа, которые мы используем для подсчета. Вот они: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 + ∞.

Целые числа — это расширенное множество натуральных чисел, которое можно получить, если добавить к ним нуль и противоположные натуральным отрицательные числа. Множество целых чисел обозначают Z.

Выглядит эти ребята вот так:

Что значит целочисленное значение. Смотреть фото Что значит целочисленное значение. Смотреть картинку Что значит целочисленное значение. Картинка про Что значит целочисленное значение. Фото Что значит целочисленное значение

Последовательность целых чисел можно записать так:

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

Свойства целых чисел

Таблица содержит основные свойства сложения и умножения для любых целых a, b и c:

Источник

Целое (тип данных)

Содержание

Представление

В памяти типовой компьютерной системы целое число представлено в виде цепочки битов фиксированного (кратного 8) размера. Эта последовательность нолей и единиц — ни что иное, как двоичная запись числа, поскольку обычно для представления чисел в современной компьютерной технике используется позиционный двоичный код. Диапазон целых чисел, как правило, определяется количеством байтов в памяти компьютера, отводимых под одну переменную.

Для 64-разрядных операционных систем учитывая разность моделей данных (LP64, LLP64, ILP64), представление целого типа на разных моделях данных может отличаться между собой. Тип int и long может составлять как 4 так и 8 байт.

Стоит отметить, что каждый язык программирования реализует свою сигнатуру представления целых чисел, которая может отличатся от международных стандартов, но обязана его/их поддерживать. К примеру можно отнести кросс-платформенную библиотеку Qt, где целое представляется типом qintX и quintX, где X-8,16,32,64.

Целые типы подразделяются на беззнаковые (англ. unsigned ) и знаковые (англ. signed ).

Беззнаковые целые

В C и C++ для обозначения беззнаковых типов используется префикс unsigned. В C# в качестве показателя беззнаковости используется префикс u (англ. unsigned). Например, для объявления беззнакового целого, равного по размеру одному машинному слову используется тип uint.

Беззнаковые целые, в частности, используются для адресации памяти, представления символов.

Иногда в литературе [1] встречаются рекомендации не использовать тип беззнаковые целые, поскольку он может быть не реализован процессором компьютера, однако вряд ли этот совет следует считать актуальным — большинство современных процессоров (в том числе x86-совместимые [2] ) одинаково хорошо работают как со знаковыми, так и с беззнаковыми целыми.

В некоторых языках, например java, беззнаковые целые типы (за исключением символьного) отсутствуют. [3]

Целые со знаком

Предельные значения для разных битностей

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

БитМаксимальное без знакаМинимальное со знакомМаксимальное со знаком
ЗначениеЦифрЗначениеЦифрЗначениеЦифр
4152-8171
82553-12831273
1665 5355-32 768532 7675
2416 777 2158-8 388 60878 388 6077
324 294 967 29510-2 147 483 648102 147 483 64710
48281 474 976 710 65515-140 737 488 355 32815140 737 488 355 32715
6418 446 744 073 709 551 61520-9 223 372 036 854 775 808199 223 372 036 854 775 80719
9679 228 162 514 264 337 593 543 950 33529-39 614 081 257 132 168 796 771 975 1682939 614 081 257 132 168 796 771 975 16729
128340 282 366 920 938 463 463 374 607 431 768 211 45539-170 141 183 460 469 231 731 687 303 715 884 105 72839170 141 183 460 469 231 731 687 303 715 884 105 72739

Операции над целыми

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

К целочисленным значениям применимы в первую очередь арифметические операции. Ниже приведены самые часто используемые (в скобках указаны их обозначения в различных языках программирования и им аналогичным средствах).

В некоторых языках программирования для лаконичности есть операторы, которые позволяют производить арифметическую операцию с присвоением. Например, «+=» складывает текущее значение переменной слева с выражением справа и помещает результат в исходную переменную. Так же в некоторых языках и средах доступна совмещённая операция MulDiv, которая умножает на одно число, а потом делит результат на второе.

Обычно самыми дорогими по скорости операциями являются умножение и деление (получение остатка от деления).

В памяти компьютера для хранения целых чисел обычно отводится ячейки фиксированного объёма. Из-за этого операции увеличения и уменьшения значений могут приводить к переполнению, что оборачивается искажением результата. Некоторые языки программирования позволяют производит вызов исключения в таких случаях. Кроме этого можно определять поведение при переполнении:

Побитовые операции

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

Работа со строками

Довольно частыми операциями являются получение строки из числового значения во внутреннем представлении и обратно — число из строки. При преобразовании в строку обычно доступны средства задания форматирования в зависимости от языка пользователя.

Ниже перечислены некоторые из представлений чисел строкой.

Перечислимый тип

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

Источник

4.4 – Целочисленные типы данных со знаком

ТипМинимальный размерПримечание
short16 бит
int16 битНа современных архитектурах размер обычно составляет 32 бита
long32 бита
long long64 бита

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

Напоминание

C++ гарантирует только то, что целочисленные типы будут иметь определенный минимальный размер, а не то, что они будут иметь конкретный размер. Для получения информации о том, как определить размер каждого типа на вашем компьютере, смотрите урок «4.3 – Размеры объектов и оператор sizeof ».

Целочисленные значения со знаком

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

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

Определение целочисленных значений со знаком

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

Все целочисленные значения (кроме int ) могут иметь необязательный суффикс int :

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

Однако это ключевое слово так же не следует использовать, поскольку оно избыточно, так как по умолчанию целочисленные значения уже со знаком.

Лучшая практика

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

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

В качестве отступления.

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

Для тех, кто не склонен к математике… воспользуйтесь таблицей. 🙂

Переполнение целочисленных значений

Что произойдет, если мы попытаемся присвоить значение 280 8-битному целочисленному значению со знаком? Это число выходит за пределы диапазона, который может содержать 8-битовое целочисленное значение со знаком. Для числа 280 требуется 9 бит (плюс 1 бит для знака), но в 8-битном целочисленном значении со знаком у нас есть только 7 бит (плюс 1 бит для знака).

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

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

Предупреждение

Переполнение целочисленного значения со знаком приведет к неопределенному поведению.

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

Деление целочисленных значений

При делении двух целочисленных значений, когда частное представляет собой целое число, C++ работает так, как вы ожидаете:

Это дает ожидаемый результат:

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

Это дает, возможно, неожиданный результат:

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

Предупреждение

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

Если вам необходимы дробные результаты, мы покажем способ их получить в уроке «5.2 – Арифметические операторы».

Источник

Урок №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 нужно быть аккуратным.

Источник

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

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