Типы данных integer – Урок №31. Целочисленные типы данных | Уроки С++

Содержание

Урок №31. Целочисленные типы данных | Уроки С++

  Обновл. 25 Мар 2019  | 

В этом уроке мы рассмотрим целочисленные типы данных, их диапазоны значений, деление, а также переполнение: что это такое и примеры.

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

Целочисленный тип данных — это тип, переменные которого могут содержать только целые числа (без дробной части, например: -2, -1, 0, 1, 2). В C++ есть пять основных целочисленных типов, доступных для использования:

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

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

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

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

Происходит следующим образом:

char c; short int si; // допустимо short s; // предпочтительнее int i; long int li; // допустимо long l; // предпочтительнее long long int lli; // допустимо long long ll; // предпочтительнее

char c;

short int si; // допустимо

short s;      // предпочтительнее

int i;

long int li; // допустимо

long l;      // предпочтительнее

long long int lli; // допустимо

long long ll;      // предпочтительнее

В то время как полные названия short intlong int и long long int могут использоваться, их сокращённые версии (без int) более предпочтительны для использования. К тому же постоянное добавление int затрудняет чтение кода (легко спутать с переменной).

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

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

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

signed:

signed char c; signed short s; signed int i; signed long l; signed long long ll;

signed char c;

signed short s;

signed int i;

signed long l;

signed long long ll;

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

1-байтовая целочисленная переменная со знаком (signed) имеет диапазон значений от -128 до 127. Любое значение от -128 до 127 (включительно) может храниться в ней безопасно.

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

unsigned, используйте ключевое слово unsigned:

unsigned char c; unsigned short s; unsigned int i; unsigned long l; unsigned long long ll;

unsigned char c;

unsigned short s;

unsigned int i;

unsigned long l;

unsigned long long ll;

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

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

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

Размер/ТипДиапазон значений
1 байт signedот -128 до 127
1 байт unsignedот 0 до 255
2 байта signedот -32 768 до 32 767
2 байта unsignedот 0 до 65 535
4 байта signedот -2 147 483 648 до 2 147 483 647
4 байта unsignedот 0 до 4 294 967 295
8 байтов signedот -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807
8 байтов unsignedот 0 до 18 446 744 073 709 551 615

Для математиков: переменная signed с n-ным количеством бит имеет диапазон от -(2n-1) до 2n-1-1. Переменная unsigned с n-ным количеством бит имеет диапазон от 0 до (2n)-1. Для нематематиков: используем таблицу 🙂

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

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

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

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

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

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

Программисты, как правило, избегают использования целочисленных типов 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 бит):

#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; }

#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;

}

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

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

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

#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; }

#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;

}

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

x was: 0
x is now: 65535

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

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

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

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

#include <iostream> int main() { std::cout << 20 / 4 << std::endl; return 0; }

#include <iostream>

int main()

{

    std::cout << 20 / 4 << std::endl;

    return 0;

}

Результат:

5

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

#include <iostream> int main() { std::cout << 8 / 5 << std::endl; return 0; }

#include <iostream>

int main()

{

    std::cout << 8 / 5 << std::endl;

    return 0;

}

Результат:

1

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

Рассмотрим детальнее пример выше: 8 / 5 = 1.6. Но, как мы уже знаем, при делении целых чисел, результатом является другое целое число. Таким образом, дробная часть (0.6) отбрасывается и остаётся 1.

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

Оценить статью:

Загрузка…

За репост +20 к карме и моя благодарность!

ravesli.com

Типы данных в информатике. Тип Integer

К концу 2018 года в мире насчитывается несколько сот языков программирования, меньшая часть из них представлена узкоспециализированными языками, такими как, например, Ada (язык, изобретенный ВВС США для управления баллистическими ракетами) или Fortran, в основном применяемый в научной разработке программного обеспечения. Но большинство из них общедоступно для понимания и изучения и находят широкое применение.

Типы данных в информатике — это структурная и размерная характеристика выделенной ячейки памяти, в которую можно поместить некоторое значение для дальнейших операций. Одним из таких типов является тип integer (int). Это целочисленный тип данных. То есть поместить в зарезервированную ячейку типа integer можно только целое число (0, 1, 2, 256, 10000 и так далее).

Диапазон значений, которые можно положить в ячейку типа integer, отличается в других языках программирования и на разных процессорах, например в языке программирования Pascal составляет от -32768 до 32768. Попытка «положить» данные больше или меньше данного диапазона вызовет «ошибку переполнения данных».

Характеристики типа данных integer

В 32-разрядных архитектурах занимают от −2 147 483 648 (-231) до 2 147 483 647 (231−1)

Существуют типы integer, без знаков. Например, unsigned int в C#. Неправильное использование таких типов данных может приводить к ошибкам.

Также существуют различные вариации типа integer, такие как:

  • short int — предусматривается с целью сократить количество памяти, выделяемой под нужды программиста.
  • long int — напротив, создан для тех, кто боится, что в ходе работы программы есть риск «вылететь» за пределы обычного int и получить «ошибку переполнения данных».

Типы integer, real, dint (в языке Pascal) относятся к математическим типам данных. Это значит, что возможно производить математические действия — сложение, умножение, вычитание, деление.

Характеристики типа integer real

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

Другие типы данных в популярных языках программирования

Char — символьный тип данных, может хранить в себе 1 символ из таблицы символов ASCII. Занимает 1 байт и интерпретируется как символ ASCII.

String — строковый тип данных, обычно представлен массивом объектов типа char. Обычно возможности современных языков позволяют совершать самые разнообразные действия над объектами типа string, например конкатенацию (склеивание), удаление строк, замену символов в строке.

Boolean — логический тип данных. Примитивный тип данных в информатике, выражающий 2 состояния. Очень полезен, когда в программе необходимо выразить только 2 состояния (например, написать функцию, которая бы возвращала только правду или ложь).

Приведение типов

Языки программирования позволяют «приводить» типы друг к другу. Например, инициализировав переменную типа integer, мы можем в дальнейшем привести ее к типу double, то есть разрешить компилятору перезаписать ее и обращаться с ней в дальнейшем как с числом с плавающей точкой.

Но не все типы данных возможно так просто преобразовывать. Например, мы никак не приведем string к integer, компилятор просто не поймет наших действий. Также есть частные случаи компиляторов и языков программирования. Например, в языке Pascal нельзя преобразовать тип integer к integer real, потому что только тип real поддерживает операцию деления.

В современных языках, таких как C#, нет таких проблем, чаще всего программист может безболезненно преобразовывать интуитивно похожие типы данных, такие как int. double, long int и так далее. Более того, в динамически типизируемых языках даже возможна ситуация, когда тип данных char приводится к int!

Это дозволено потому, что компилятор, вместо того, чтобы работать с символом, берет его порядковый номер из таблицы ASCII и уже его использует для взаимодействия с int. В языках со строгой типизацией, таких как C++ или C#, это, конечно же, невозможно.

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

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

fb.ru

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

  • Время чтения: 2 мин

В этой статье

Содержит 32-разрядные (4-байтовые) целые числа со знаком в диапазоне от -2 147 483 648 до 2 147 483 647.Holds signed 32-bit (4-byte) integers that range in value from -2,147,483,648 through 2,147,483,647.

ПримечанияRemarks

Тип данных Integer обеспечивает оптимальную производительность на 32-разрядных процессорах.The Integer data type provides optimal performance on a 32-bit processor. Другие целочисленные типы загружаются в память и сохраняются в памяти с более низкой скоростью.The other integral types are slower to load and store from and to memory.

Значение по умолчанию для типа Integer — 0.The default value of Integer is 0.

Назначения литераловLiteral assignments

Можно объявить и инициализировать Integer переменной, назначив ей десятичный литерал, шестнадцатеричный восьмеричный литерал, или (начиная с Visual Basic 2017) двоичный литерал.You can declare and initialize an Integer variable by assigning it a decimal literal, a hexadecimal literal, an octal literal, or (starting with Visual Basic 2017) a binary literal. Если целочисленный литерал выходит за пределы диапазона Integer (то есть, если он меньше Int32.MinValue или больше Int32.MaxValue), возникает ошибка компиляции.If the integer literal is outside the range of Integer (that is, if it is less than Int32.MinValue or greater than Int32.MaxValue, a compilation error occurs.

В следующем примере целые числа, равные 90 946 и представленные в виде десятичного, шестнадцатеричного и двоичного литерала, назначаются значениям Integer.In the following example, integers equal to 90,946 that are represented as decimal, hexadecimal, and binary literals are assigned to Integer values.

Dim intValue1 As Integer = 90946
Console.WriteLine(intValue1)
Dim intValue2 As Integer = &h26342
Console.WriteLine(intValue2)

Dim intValue3 As Integer = &B0001_0110_0011_0100_0010
Console.WriteLine(intValue3)
' The example displays the following output:
'          90946
'          90946
'          90946

Примечание

Используйте префикс &h или &H для обозначения шестнадцатеричного литерала, префикс &b или &B для обозначения двоичного литерала, а также префикс &o или &O для обозначения восьмеричный литерал.You use the prefix &h or &H to denote a hexadecimal literal, the prefix &b or &B to denote a binary literal, and the prefix &o or &O to denote an octal literal. У десятичных литералов префиксов нет.Decimal literals have no prefix.

Начиная с Visual Basic 2017, можно также использовать символ подчеркивания, _, в качестве разделителя разрядов для повышения удобства чтения, как в примере ниже показан.Starting with Visual Basic 2017, you can also use the underscore character, _, as a digit separator to enhance readability, as the following example shows.

Dim intValue1 As Integer = 90_946
Console.WriteLine(intValue1)

Dim intValue2 As Integer = &H0001_6342
Console.WriteLine(intValue2)

Dim intValue3 As Integer = &B0001_0110_0011_0100_0010
Console.WriteLine(intValue3)
' The example displays the following output:
'          90946
'          90946
'          90946

Начиная с Visual Basic 15.5, можно также использовать символ подчеркивания (_) в качестве начального разделителя между префиксом и двоичное, шестнадцатеричное или восьмеричное цифры.Starting with Visual Basic 15.5, you can also use the underscore character (_) as a leading separator between the prefix and the hexadecimal, binary, or octal digits. Пример:For example:

Dim number As Integer = &H_C305_F860

Чтобы использовать символ подчеркивания в качестве начального разделителя, нужно добавить в файл проекта Visual Basic (*.vbproj) следующий элемент:To use the underscore character as a leading separator, you must add the following element to your Visual Basic project (*.vbproj) file:

<PropertyGroup>
  <LangVersion>15.5</LangVersion>
</PropertyGroup>

Дополнительные сведения см. в разделе параметр версии языка Visual Basic.For more information see setting the Visual Basic language version.

Числовые литералы могут содержать I символ типа для обозначения Integer тип данных, как показано в следующем примере.Numeric literals can also include the I type character to denote the Integer data type, as the following example shows.

Dim number = &H_035826I

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

  • Вопросы взаимодействия.Interop Considerations. При взаимодействие с компонентами, которые не написаны для платформы .NET Framework, такие как автоматизация или COM-объекты, необходимо помнить, что Integer имеет другой размер (16 бит) в других средах.If you are interfacing with components not written for the .NET Framework, such as Automation or COM objects, remember that Integer has a different data width (16 bits) in other environments. При передаче 16-разрядного аргумента такому компоненту в новом коде Visual Basic следует объявить его как Short, а не как Integer.If you are passing a 16-bit argument to such a component, declare it as Short instead of Integer in your new Visual Basic code.

  • Расширяющие.Widening. Тип данных Integer можно расширить до Long, Decimal, Single или Double.The Integer data type widens to Long, Decimal, Single, or Double. Это означает, что тип Integer можно преобразовать в любой из этих типов без возникновения ошибки System.OverflowException.This means you can convert Integer to any one of these types without encountering a System.OverflowException error.

  • Символы типа.Type Characters. При добавлении к литералу символа типа литерала I производится принудительное приведение литерала к типу данных Integer.Appending the literal type character I to a literal forces it to the Integer data type. При добавлении символа идентификатора типа % к любому идентификатору производится принудительное приведение этого идентификатора к типу Integer.Appending the identifier type character % to any identifier forces it to Integer.

  • Тип Framework.Framework Type. В .NET Framework данный тип соответствует структуре System.Int32.The corresponding type in the .NET Framework is the System.Int32 structure.

ДиапазонRange

При попытке присвоить целочисленной переменной значение, лежащее за пределами диапазона данного типа, возникает ошибка.If you try to set a variable of an integral type to a number outside the range for that type, an error occurs. При попытке задать дробное значение оно округляется вверх или вниз до ближайшего целого значения.If you try to set it to a fraction, the number is rounded up or down to the nearest integer value. Если число находится точно посередине между двумя целыми числами, значение округляется до ближайшего четного целого.If the number is equally close to two integer values, the value is rounded to the nearest even integer. Такое поведение минимизирует ошибки округления, происходящие от постоянного округления среднего значения в одном направлении.This behavior minimizes rounding errors that result from consistently rounding a midpoint value in a single direction. В следующем коде приведены примеры округления.The following code shows examples of rounding.

' The valid range of an Integer variable is -2147483648 through +2147483647.  
Dim k As Integer  
' The following statement causes an error because the value is too large.  
k = 2147483648  
' The following statement sets k to 6.  
k = 5.9  
' The following statement sets k to 4  
k = 4.5  
' The following statement sets k to 6  
' Note, Visual Basic uses banker’s rounding (toward nearest even number)  
k = 5.5  

См. такжеSee also

docs.microsoft.com

Тип данных Integer.

Тип INTEGER (целый). Этот тип представляет множество целых чисел диапазона от -32768 до 32767. В памяти ЭВМ  под целое число отводится два байта (16 бит).

Наибольшему значению целого числа 32767 соответствует стандартный идентификатор MAXINT, а наименьшему – выpaжeниe NOT(MAXINT)=-(MAXINT+1), или число -32768. Операции, проводимые над целыми числами: «+» сложение, «-» вычитание, «*» умножение, DIV — целочисленное деление, MOD — остаток от целочисленного деления, AND — арифметическое ‘И’, OR — арифметическое ‘ИЛИ’, NOT – арифметическое отрицание, XOR — исключающая дизъюнкция. Примеры использования этих операций приведены в таблице1.

Любая из этих операций выполнима над двумя целыми числами, если абсолютная величина результата не превышает MAXINT (для умножения). В противном случае возникает прерывание программы, связанное с переполнением.
Например: требуется вычислить выражение 1000 * 4000 div 2000. Поскольку операции умножения и деления имеют один приоритет и выполняются слева направо в порядке записи арифметического выражения, то при умножении произойдет прерывание, связанное с переполнением. Выход из этой ситуации возможен при изменении порядка выполнения операций умножения и деления, для чего используются круглые скобки ==> 1000 * (4000 div 2000).
Предусмотрено представление целых чисел в шестнадцатеричной системе счисления. Форма записи таких чисел $Х, где X — целая константа, а символ $ — признак. Примеры: $57, $1FF. Напомним, что в шестнадцатеричной системе счисления цифры 10, 11, 12, 13, 14 и 15 заменяются латинскими буквами А, В, С, D, Е и F соответственно.
Кроме типа INTEGER в языке Pascal предусмотрены и другие целые типы данных BYTE, SHORTINT, WORD и LONGINT (таблица 2). Все эти типы определены на множестве целых чисел, характеризуются одним набором арифметических операций и отличаются диапазоном значений и объемом занимаемой памяти.


Предыдущая статья: Алфавит языка Pascal.
Оглавление: Лекции по Pascal.
Следующая статья: Тип данных Real.


mojainformatika.ru

Целые типы

В языке Паскаль определено пять целых типов.

Таблица. Целые типы Pascal

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

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

Здесь a, b, c… — имена переменных, integer – тип переменных. Транслятор, встретив такое описание переменных a, b, c, запоминает, что эти переменные могут принимать только целые значения и формирует соответственно этому команды программы.

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

Знак операцииОперация
+Сложение
Вычитание
*Умножение
divЦелочисленное деление (остаток отбрасывается). Деление без округления (целая часть частного).
modДеление по модулю (выделение остатка от деления). Остаток от деления: a mod b = a – ((a div b) * b).

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

Над целыми типами, как и многими другими, допустимы операции отношения (сравнения). Результат таких операций относится к типу boolean и может принимать одно из двух значений – либо true (истина), либо false (ложь).

Таблица. Операции отношения

Знак операцииОперация
=Равно
<>Не равно
>=Больше или равно
>Больше
<=Меньше или равно
<Меньше

Целые типы могут приниматься в качестве фактических параметров рядом стандартных функций языка программирования Pascal.

Таблица. Стандартные функции Pascal, применимые к аргументам целых типов

ФункцияТип результатаРезультат выполнения
abs(x)ЦелыйМодуль x (абсолютная величина x)
sqr(x)ЦелыйКвадрат x
succ(x)ЦелыйСледующее значение x (x+1)
pred(x)ЦелыйПредыдущее значение x (x-1)
random(x)ЦелыйСлучайное целое число из интервала 0..x-1.
sin(x)ДействительныйСинус x (угол в радианах)
cos(x)ДействительныйКосинус x (угол в радианах)
arctan(x)ДействительныйАрктангенс x (угол в радианах)
ln(x)ДействительныйНатуральный логарифм x
exp(x)ДействительныйЭкспонента x
sqrt(x)ДействительныйКвадратный корень из x
odd(x)ЛогическийЗначение true, если x – нечетное число; false – если четное.

Функция random возвращает равномерно распределенное случайное целое число, если ей передан целый аргумент. При повторном запуске программы она возвращает те же значения. Во избежание этого следует в начале программы вызвать процедуру без параметров randomize.

Процедуры inc и dec могут иметь по одному или по два параметра целого типа. Если параметров два, то значение первого увеличивается (для inc) или уменьшается (для dec) на величину, равную значению второго параметра. Например, inc(x,2) равнозначно x+2. Если параметр один, то его значение увеличивается (для inc) или уменьшается (для dec) на единицу. Например, dec(x) равнозначно x-1. (ТАКИХ ПРОЦЕДУР ВО FREEPASCAL СКОРЕЕ ВСЕГО НЕТ.)

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

Примеры работы некоторых приведенных выше операций и функций:
Пример 1. Пусть a = 17, b = 5. Тогда a div b дает 3, a mod b дает 2 (остаток от деления), sqr(b) дает 25.
Пример 2. Пусть x = 4.7389. Тогда trunc(x) дает 4, round(x) дает 5.
Пример 3. Выражение 4 * 21 дает результат целого типа, а 4 * 21.0 – вещественного, т.к. один из сомножителей вещественный.

pas1.ru

Числовые типы данных (Visual Basic)

  • Время чтения: 4 мин

В этой статье

Visual Basic предоставляет несколько числовых типов данных для обработки чисел в различные представления.Visual Basic supplies several numeric data types for handling numbers in various representations. Целочисленный типы представляют только целые числа (положительные, отрицательных и нулевых), и нецелочисленным — числа с целой и дробной частями.Integral types represent only whole numbers (positive, negative, and zero), and nonintegral types represent numbers with both integer and fractional parts.

Таблица, показывающая side-by-side сравнение типов данных Visual Basic, см. в разделе типы данных.For a table showing a side-by-side comparison of the Visual Basic data types, see Data Types.

Целочисленные типыIntegral Numeric Types

Целочисленных типов данных представляют собой только числа без дробной части.Integral data types are those that represent only numbers without fractional parts.

Автоматический целые типы данных тип данных SByte (8-разрядная версия), тип данных Short (16-разрядная версия), целочисленный тип данных (32-разрядная версия) и Тип данных Long (64-разрядная версия).The signed integral data types are SByte Data Type (8-bit), Short Data Type (16-bit), Integer Data Type (32-bit), and Long Data Type (64-bit). Если переменная всегда хранит целые числа, а не дробных чисел, объявите его как один из этих типов.If a variable always stores integers rather than fractional numbers, declare it as one of these types.

Без знака целочисленные типы тип данных Byte (8-разрядная версия), тип данных UShort (16-разрядная версия), тип данных UInteger (32-разрядная версия) и Тип данных ULong (64-разрядная версия).The unsigned integral types are Byte Data Type (8-bit), UShort Data Type (16-bit), UInteger Data Type (32-bit), and ULong Data Type (64-bit). Если переменная содержит двоичные данные или данные неизвестной природы, объявите его как один из этих типов.If a variable contains binary data, or data of unknown nature, declare it as one of these types.

ПроизводительностьPerformance

Арифметические операции выполняются быстрее с целочисленными типами, чем с другими типами данных.Arithmetic operations are faster with integral types than with other data types. Они являются наиболее быстрым Integer и UInteger типы в Visual Basic.They are fastest with the Integer and UInteger types in Visual Basic.

Больших целых чиселLarge Integers

Если вам нужно хранить целое число больше, чем Integer может содержать тип данных, можно использовать Long вместо этого тип данных.If you need to hold an integer larger than the Integer data type can hold, you can use the Long data type instead. Long переменные могут содержать числа в диапазоне от -9223372036854775808 до 9223372036854775807.Long variables can hold numbers from -9,223,372,036,854,775,808 through 9,223,372,036,854,775,807. Операции с Long обрабатываются немного медленнее, чем с Integer.Operations with Long are slightly slower than with Integer.

Если вам требуется еще больше значения, можно использовать тип данных Decimal.If you need even larger values, you can use the Decimal Data Type. Вы можете хранить числа в диапазоне от -79,228,162,514,264,337,593,543,950,335 до 79,228,162,514,264,337,593,543,950,335 в Decimal переменной, если вы не используете десятичные разряды.You can hold numbers from -79,228,162,514,264,337,593,543,950,335 through 79,228,162,514,264,337,593,543,950,335 in a Decimal variable if you do not use any decimal places. Тем не менее операции с Decimal номера выполняются значительно медленнее, чем с другими типами числовых данных.However, operations with Decimal numbers are considerably slower than with any other numeric data type.

Двухбайтовые целые числаSmall Integers

Если не требуется полный спектр Integer тип данных, можно использовать Short тип данных, который может содержать целые числа от-32 768 до 32 767.If you do not need the full range of the Integer data type, you can use the Short data type, which can hold integers from -32,768 through 32,767. Для диапазона наименьшее целое число SByte тип данных содержит целые числа от -128 до 127.For the smallest integer range, the SByte data type holds integers from -128 through 127. Если у вас есть очень большое количество переменных, которые содержат двухбайтовые целые числа, среда CLR, иногда может хранить ваши Short и SByte переменные более эффективно и снизить потребление памяти.If you have a very large number of variables that hold small integers, the common language runtime can sometimes store your Short and SByte variables more efficiently and save memory consumption. Тем не менее операции с Short и SByte выполняются медленнее, чем с Integer.However, operations with Short and SByte are somewhat slower than with Integer.

Целые числа без знакаUnsigned Integers

Если вы знаете, что переменная никогда не должна содержать отрицательное число, можно использовать беззнаковых типовByte, UShort, UInteger, и ULong.If you know that your variable never needs to hold a negative number, you can use the unsigned typesByte, UShort, UInteger, and ULong. Каждый из этих типов данных может содержать положительное целое число в два раза превышает как его соответствующий тип со знаком (SByte, Short, Integer, и Long).Each of these data types can hold a positive integer twice as large as its corresponding signed type (SByte, Short, Integer, and Long). С точки зрения производительности каждый тип без знака точно так же эффективно, как его соответствующий тип со знаком.In terms of performance, each unsigned type is exactly as efficient as its corresponding signed type. В частности UInteger предоставил Integer являются наиболее эффективный все простые числовые типы данных.In particular, UInteger shares with Integer the distinction of being the most efficient of all the elementary numeric data types.

Нецелочисленный числовые типыNonintegral Numeric Types

Типы данных нецелочисленный представляют собой номера с целой и дробной частей.Nonintegral data types are those that represent numbers with both integer and fractional parts.

Нецелочисленный числовыми типами данных являются Decimal (128-разрядный фиксированной запятой), одного типа данных (32-разрядных с плавающей запятой), и тип данных Double (64-разрядное число с плавающей запятой).The nonintegral numeric data types are Decimal (128-bit fixed point), Single Data Type (32-bit floating point), and Double Data Type (64-bit floating point). Они являются все подписанные типами.They are all signed types. Если переменная может содержать дробную часть, объявите его как один из этих типов.If a variable can contain a fraction, declare it as one of these types.

Decimal не является типом данных с плавающей запятой.Decimal is not a floating-point data type. Decimal числа имеют двоичное целое значение и масштабный коэффициент целое число, указывающее, какая часть значения является десятичной дробью.Decimal numbers have a binary integer value and an integer scaling factor that specifies what portion of the value is a decimal fraction.

Можно использовать Decimal переменные для денежных значений.You can use Decimal variables for money values. Преимущество заключается в точность значений.The advantage is the precision of the values. Double Тип данных выполняется быстрее и требует меньше памяти, но она доступна на условиях ошибок округления.The Double data type is faster and requires less memory, but it is subject to rounding errors. Decimal Тип данных сохраняет полную точность до 28 десятичных разрядов.The Decimal data type retains complete accuracy to 28 decimal places.

С плавающей запятой (Single и Double) числа имеют большие диапазоны, чем Decimal чисел, но могут возникать ошибки округления.Floating-point (Single and Double) numbers have larger ranges than Decimal numbers but can be subject to rounding errors. Типы с плавающей запятой поддерживают меньшее количество значащих цифр, чем Decimal , но могут представлять значения, превышающие.Floating-point types support fewer significant digits than Decimal but can represent values of greater magnitude.

Нецелочисленные значения могут быть выражены как mmmEeee, в которых mmm является мантиссы (значимых цифр), а eee — показатель степени (степень 10).Nonintegral number values can be expressed as mmmEeee, in which mmm is the mantissa (the significant digits) and eee is the exponent (a power of 10). Когда положительное находятся большие значения нецелочисленных типов 7.9228162514264337593543950335E + 28 для Decimal, 3, 4028235E + 38 для Singleи 1, 79769313486231570E + 308 Double.The highest positive values of the nonintegral types are 7.9228162514264337593543950335E+28 for Decimal, 3.4028235E+38 for Single, and 1.79769313486231570E+308 for Double.

ПроизводительностьPerformance

Double наиболее эффективен для дробных типов данных, так как процессоры на современных платформах выполняют операции с плавающей запятой с двойной точностью.Double is the most efficient of the fractional data types, because the processors on current platforms perform floating-point operations in double precision. Тем не менее операции с Double не выполняются так же быстро, как и в случае с целочисленными типами, такие как Integer.However, operations with Double are not as fast as with the integral types such as Integer.

Малые величиныSmall Magnitudes

Для чисел с наименьшей возможной величиной (наиболее близким к 0) Double переменных может содержать числа, как — 4, 94065645841246544E-324 для отрицательных значений и 4, 94065645841246544E-324 для положительных значений.For numbers with the smallest possible magnitude (closest to 0), Double variables can hold numbers as small as -4.94065645841246544E-324 for negative values and 4.94065645841246544E-324 for positive values.

Малые дробные числаSmall Fractional Numbers

Если не требуется полный спектр Double тип данных, можно использовать Single тип данных, который может содержать числа с плавающей запятой от — 3, 4028235E + 38 до 3, 4028235E + 38.If you do not need the full range of the Double data type, you can use the Single data type, which can hold floating-point numbers from -3.4028235E+38 through 3.4028235E+38. Минимальные значения Single переменные являются — 1, 401298E-45 для отрицательных значений и 1, 401298E-45 для положительных значений.The smallest magnitudes for Single variables are -1.401298E-45 for negative values and 1.401298E-45 for positive values. Если у вас есть очень большое количество переменных, которые содержат небольшого числа с плавающей запятой, среда CLR, иногда может хранить ваши Single переменные более эффективно и снизить потребление памяти.If you have a very large number of variables that hold small floating-point numbers, the common language runtime can sometimes store your Single variables more efficiently and save memory consumption.

См. такжеSee also

docs.microsoft.com

Основные типы данных vb

Тип данных

Размер ячейки в байтах

Диапазон значений

Byte (байт)

1

От 0 до 255

Integer (целый)

2

От -32 768 до 32 767

Long (длинный целый)

4

От -2 147 483 648 до 2 147 483 647

Single

(с плавающей точкой обычной точности)

4

Абсолютное значение находится примерно в диапазоне от 1,4*10-45до 3,4*1038

Точность 6 десятичных разрядов

Double

(с плавающей точкой двойной точности)

8

Абсолютное значение находится примерно в диапазоне от 4,9*10-324до 1,8*10308

Точность 14 десятичных разрядов

Currency

(денежный)

8

От -922 337 203 685 477,5808 до

922 337 203 685 477,5807

String(строка переменной длины)

10 байт + длина строки

Длина строки от 0 до приблизительно 2 миллиардов символов

Date(дата/время)

8

От 1 января 100 г. до 31 декабря 9999 г.

Boolean (логический)

2

True или False

Variant

(универсальный тип)

16 байт+ длина строки

Дата/время; числовые значения с тем же диапазоном, что и для Double; строки с тем же диапазоном, что и дляString

Type (опреде-ляемый поль-зователем

тип)

Опреде-ляется компо-нентами

Диапазон каждого элемента определяется его типом данных.

Object (объект)

4

Любой указатель объекта

Если, к примеру, в программе имеется переменная типа Integer с именем КоличествоСтудентов, то где-нибудь в программе можно записать:

КоличествоСтудентов = 1000

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

КоличествоСтудентов = 1050

КоличествоСтудентов в этой инструкции является именемпеременной, а 1000 в этом примере — еёзначением.

Инструкцию КоличествоСтудентов = 1000 называют инструкцией присвоения: переменная КоличествоСтудентов получает значение, равное 1000.

Эту инструкцию нельзя понимать в том смысле, что левая часть равна правой части. Присвоение – это действие, заключающееся в том, что значение правой части записывается в ячейку памяти, отведенную для хранения значения переменной, находящейся слева от знака равенства в инструкции присвоения. Будет ошибкой записать эту инструкцию так:

1000 = КоличествоСтудентов

Слева от знака равенства должна находиться переменная. А справа от знака равенства должно находиться выражение (формула), вычисленное в соответствии с которым значение, становится значением указанной слева от знака равенства переменной.

Переменные типов Byte, Integer, Long, Single, Double, Currency принимают числовые значения.

Типы Byte/Integer/Long

Данные типа Byte, Integer, Long содержат лишь целые числовые значения из различных диапазонов. Если переменной такого типа присваивается 1.4, то возвращается 1, если 1.5 – возвращается 2:

Dim n As Integer

n =1.7 ‘Результат: 2

Типы Single/Double/Currency

Данные типа Single и Double содержат числа с плавающей точкой из разных диапазонов значений. Single – с 6 верными десятичными разрядами после запятой, Double – с 14 верными десятичными разрядами после запятой. Данные типа Currency также служат для представления чисел с плавающей точкой, но число разрядов после запятой ограничено четырьмя. Этого доста­точно при выполнении денежных расчетов:

Dim s As Single, a As Single

s =1.7 ‘Результат: 1.7

a = — 62.697

В VB в качестве разделителя целой и дробной частей используется точка.

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

Константы типа Singleс порядком выглядят так:

Так выглядит константа с порядком

А вот чему равно ее значение

1.5Е-8

1.5*10-8или 0.000000015

1E-6

0.000001

1.256578E5

125657.8

При записи констант типа Doubleвместо буквыEприменяется букваD, что сигнализируетVB, что константа имеет тип с плавающей точкой, но не обычной, а двойной точности.

Так выглядит константа с порядком

А вот чему равно ее значение

1.5D-8

1.5*10-8или 0.000000015

1D-6

0.000001

1.256578E5

125657.8

К числовым переменным можно применять арифметические операции сложения (+), вычитания (-), умножения (*), деления (/), возведения в степень (^) и некоторые другие, с которыми мы ознакомимся позже.

Тип String

Значением переменной типа String может быть символ или строка символов.

Для того чтобы VB отличал константу типа строки символов от имени переменной, константа заключается в парные кавычки:

Dim Переменная As String

Переменная = «Привет Мир» ‘Результат: Привет Мир

Строки можно объединять. В качестве оператора объединения строк в VB можно использовать как знак суммирования (+), так и знак «коммерческое и» (&). Однако для лучшей читаемости кода следует применять только &, так как знак плюса используется обычно при суммировании числовых значений.

Dim a As String, b As String, c As String

a = “Петр”

b = “великий”

c = a+b ‘Значение: Петр великий

c = a&b ‘Значение: Петр великий

Тип Date

Значением переменной типа Date может быть, дата, время или дата и время.

Данные типа Date специально предназначены для обработки информации о дате и времени. Чтобы для VB было понятно, что под указанным значением подразумевается дата и/или время, нужно поместить его между двумя знаками #. При вводе следует пользоваться американским форматом (мм/дд/гг). Если же при вводе данных этого типа использовать кавычки («), что допустимо, то следует применять установленный в системе формат даты и времени ( как правило – дд/мм/гг):

Dim d As Date

d = #10/16/95# ‘Результат: 16.10.95

d = #1:25:00 PM# ‘Результат: 13:25:00

d = «6.10.95» ‘Результат: 6.10.95

d = «13:25» ‘Результат: 13:25:00

Тип Boolean

Переменная типа Boolean может принимать всего два значения. Такая переменная может иметь значениеTrue(истина) или значениеFalse(ложь).

В VB значению True соответствует 1, а False — 0. Если переменной этого типа присваивается значение 0, то переменная содержит False. Все другие значения подразумевают True:

DimnVarAsBoolean

nVar= 5 ‘Результат:True

Тип Variant

Универсальный тип данных Variant — это хамелеон. Он устанавливает тип данных в зависимости от содержимого. Если в такой переменной содержится число, то переменная типа Variant принимает соот­ветствующий тип данных.

Если ее содержимое — число 5, то она принимает тип Integer;

если 1.2— Double; если текст, то String. Переменная типа Variant изменяет свой тип во время выполнения программы. Вот простой пример:

Dim V As Variant

V = «25» ‘V содержит «25» (String)

V = V +5 ‘V содержит 30 (Integer)

V = V & » штук» ‘V содержит «30 штук» (String)

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

studfiles.net

Оставить комментарий

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

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