Число 256 можно хранить в переменной типа

Число 256 можно хранить в переменной типа

Представление знака числа

Целые типы

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

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

Таблица 7 — Целые типы

Название Диапазон значений Размер, байт
Byte 0. 255
ShortInt -128. +127
SmallInt -32 768. +32 767
Word 0. 65 535
Integer -2 147 483 648. +2 147 483 647
LongInt -2 147 483 648. +2 147 483 647
LongWord 0. 4 294 967 295
Int64 -9e18. +9e18
Cardinal 0. 2 147 483 647

Примечание: Типы LongWord и Int64 впервые введены в Delphi версии 4, а типы SmallInt и Cardinal отсутствуют в Delphi 1. Тип Integer для Delphi 1 занимает 2 байта и имеет диапазон значений от -32768 до +32767, т.е. совпадает с SmallInt из Delphi 4.

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

При действиях с целыми числами тип результата будет соответствовать типу операндов, а если операнды относятся к различным целым типам — общему типу, который включает в себя оба операнда. Например, при действиях с ShortInt и Word общим будет тип Integer.

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

Для беззнаковых величин все биты являются битами данных и вместо ограничения +32767 переменная может содержать числа до +65535. Для знаковых величин левый (старший) бит является знаковым битом.

— унарный знак + (плюс), поставленный перед параметром целого или вещественного типа, никак не влияет на его значение.

— унарный знак — (минус), поставленный перед параметром целого или вещественного типа, приводит к изменению знака величины.

Читайте также:  Как подключить вебкамеру к ноутбуку

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

Беззнаковое Знаковое
-7
+2
-5

Двоичное представление результата сложения одинаково для беззнакового и знакового числа. Однако биты представляют +251 для беззнакового числа и -5 для знакового. Таким образом, числовое содержимое поля может интерпретироваться по-разному.

Арифметическое переполнение (arithmetic overflow) — потеря значащих цифр при вычислении значения выражения.

Если в переменной можно хранить лишь неотрицательные значения (типы BYTE и WORD), то попытка записи в них отрицательного значения не вызовет ошибки. Возникнет арифметическое переполнение и в переменной окажется положительное значение, равное разности между максимально возможным числом комбинаций для этой переменной (256 или 65536 соответственно) и записываемым в нее отрицательным значением. Например, если в переменную a типа BYTE в результате вычислений записывается -20, то реально в ней окажется значение 256-20=236. Аналогичная ситуация возникает при записи слишком больших чисел – значение переменной проходит через ноль и начинает отсчет сначала. Так, при занесении значения 300 в переменную типа BYTE ее значением окажется 300-256=44.

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

procedure TfmExample.bbRunClick(Sender: TObject);

k:=65535; // Максимальное значение типа Word

k:=k+1; // По правилам математики k=65536

IbOutput.Caption:=IntToStr(k); // На самом деле k=0!

Если активизировать переключатель project | options | Compiler | Range checking и повторить компиляцию с помощью Project | Build All, компилятор вставит в программу код проверки переполнения и при прогоне программы возникнет исключительная ситуация, которую при желании можно соответствующим образом обработать. Заметим, что, если изменить программу следующим образом:

k:=65535; // Максимальное значение типа Word

//На экран будет выведено значение 65536

переполнения не произойдет, т.к. 32-разрядный компилятор версий Delphi 32 автоматически преобразует операнды выражения k+i к 4-байтным величинам.

Читайте также:  Сколько элементов содержит множество

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

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

Следующий пример — сложение двух 8-битовых чисел, представленных в двоичном коде, — иллюстрирует этот случай:

Беззнаковое Знаковое
+121
+11
-124
(неправильно)

Сложение положительных чисел никогда не дает в результате отрицательного числа.

Результат сложения оказался непредставимым в диапазоне значений 8-битовых чисел в двоичном коде (от -128 до +127).

Также возможен случай одновременного арифметического переполнения беззнакового и знакового чисел:

Беззнаковое Знаковое
-10
-119
+127
(неправильно) (неправильно)

Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: Учись учиться, не учась! 11153 — | 8287 — или читать все.

Все о коде и не только

  • Получить ссылку
  • Facebook
  • Twitter
  • Pinterest
  • Электронная почта
  • Другие приложения

Типы данных в C++

Составные типы

Символьный тип

Данные типа char в памяти компьютера всегда занимают 1 байт. Это связа­но с тем, что обычно под величину символьного типа отводят столько памяти, сколько необходимо для хранения любого из 256 символов клавиатуры.
Сим­вольный тип может быть со знаком или без знака.
В величинах со знаком signed char можно хранить значения в диапазоне от -128 до 127. Соответствен­но значения переменных типа unsigned char могут находиться в диапазоне от 0 до 255.

Он-лайн самоучитель Delphi

Память компьютера

Память компьютера состоит из ячеек (битов). Каждый бит может хранить одну двоичную цифру. Следовательно, значением бита может быть ноль или единица. Восемь битов объединены в байт. Максимальное число, которое можно записать при помощи восьми двоичных цифр — это 11111111, что соответствует десятичному числу 255, минимальное — ноль. Поэтому значением байта может быть число от нуля до 255.

Память используется для хранения переменных. Так как переменные различных типов могут принимать различные значения, то для их хранения нужно разное количество памяти. Память под переменные выделяется целым числом байтов. Например, значением переменной типа char может быть любой из 256 символов. Поэтому для хранения переменной этого типа достаточно одного байта. Значением переменной типа integer может быть число от -32 768 до 32 767 (65 535 значений), для хранения переменной этого типа требуется два байта. Очевидно, что чем больше диапазон значений типа, тем больше байтов нужно для хранения переменной этого типа (табл. П3.1).

Читайте также:  Какой лучше выбрать тепловизор

Таблица П3.1. Диапазоны значений и занимаемая память для разных типов переменных

Занимаемая память (количество байтов)

Строка до 256 символов

Строка до n символов

Занимаемая память (количество байтов)

-2 147 483 648-2 147 483 647

В программе для хранения одного и того же значения можно использовать переменные разных типов (при этом будет применяться разное количество памяти). Например, если в программе используется переменная Day, содержащая число месяца, то для нее можно задать тип byte, integer или longint. В первом случае будет занят один байт памяти, во втором — два, в третьем — четыре. Но реально будет использоваться только один байт, а остальные будут только заняты. Поэтому, выбирая тип для переменной, следует подбирать наиболее подходящий тип для каждой конкретной ситуации. Особо необходимо обращать внимание на описание строковых переменных и массивов.

Выделяя память для строковых переменных, следует помнить, что если не указана предельная длина строки, то переменной выделяется 256 байтов. Объявляя переменную, предназначенную, например, для хранения имени человека, нужно писать name: string [30], а не name: string.

Каждому массиву программы выделяется память, объем которой определяется как типом элементов массива, так и их количеством. Для хранения двумерного массива, например, 20×20 вещественных чисел нужно более 3 Кбайт памяти (20x20x8 = 3200).

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

Ссылка на основную публикацию
Хочу создать группу в контакте
Приветствую вас, дорогие читатели. Социальные сети уже давно вошли в нашу жизнь, поэтому всем владельцам абсолютно любого бизнеса, как традиционного,...
Установка mac os transmac
В сети сейчас полно копипастов, по сути одной и той же статьи, про установку MacOS X на хакинтош примерно с...
Установка op com на windows 10
Всем привет! Очень многие вектроводы заказывают с Китая OP-COM и сталкиваются с проблемами установки драйверов самого OP-COM на различных системах...
Хром для андроид тв приставок
Всем привет! Предлагаю очередной раз поднять больную тему браузеров для Android TV. В разделе «вопрос – ответ» уже много раз...
Adblock detector