Сколько памяти занимает int
Перейти к содержимому

Сколько памяти занимает int

  • автор:

Диапазоны типов данных

32-разрядные и 64-разрядные компиляторы Microsoft C++ распознают типы в таблице далее в этой статье.

Если имя начинается с двух символов подчеркивания ( __ ), тип данных является нестандартным.

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

Тип Имя Байт Другие имена Диапазон значений
int 4 signed От −2 147 483 648 до 2 147 483 647
unsigned int 4 unsigned От 0 до 4 294 967 295
__int8 1 char От -128 до 127
unsigned __int8 1 unsigned char От 0 до 255
__int16 2 short , short int , signed short int От −32 768 до 32 767
unsigned __int16 2 unsigned short , unsigned short int От 0 до 65 535
__int32 4 signed , signed int , int От −2 147 483 648 до 2 147 483 647
unsigned __int32 4 unsigned , unsigned int От 0 до 4 294 967 295
__int64 8 long long , signed long long От −9 223 372 036 854 775 808 до 9 223 372 036 854 775 807
unsigned __int64 8 unsigned long long От 0 до 18 446 744 073 709 551 615
bool 1 нет false или true
char 1 нет -128–127 по умолчанию

В зависимости от характера использования переменная типа __wchar_t обозначает расширенный символьный или многобайтовый символьный тип. Чтобы указать константу расширенного символьного типа, перед символьной или строковой константой следует использовать префикс L .

signed и unsigned — это модификаторы, которые можно использовать с любым целочисленным типом, кроме типа bool . Обратите внимание, что char , signed char и unsigned char — это три разных типа, предназначенных для механизмов, подобных перегрузке и шаблонам.

Размер типов int и unsigned int — 4 байта. Однако переносимый код не должен зависеть от размера int , поскольку языковой стандарт позволяет варьировать его в зависимости от реализации.

C и C++ в Visual Studio также поддерживают целочисленные типы с указанием размера. Дополнительные сведения см. в разделе __int8, __int16, __int32, __int64 и ограничения целых чисел.

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

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

Типы char, short, int и long

Целый тип char занимает в памяти 1 байт (8 бит) и позволяет выразить в двоичной системе счисления 2^8 значений=256. Тип char может содержать как положительные, так и отрицательные значения. Диапазон изменения значений составляет от -128 до 127.

uchar

Целый тип uchar также занимает в памяти 1 байт, как и тип char, но в отличие от него, uchar предназначен только для положительных значений. Минимальное значение равно нулю, максимальное значение равно 255. Первая буква u в названии типа uchar является сокращением слова unsigned (беззнаковый).

short

Целый тип short имеет размер 2 байта(16 бит) и, соответственно, позволяет выразить множество значений равное 2 в степени 16: 2^16=65 536. Так как тип short является знаковым и содержит как положительные, так и отрицательные значения, то диапазон значений находится между -32 768 и 32 767.

ushort

Беззнаковым типом short является тип ushort, который также имеет размер 2 байта. Минимальное значение равно 0, максимальное значение 65 535.

int

Целый тип int имеет размер 4 байта (32 бита). Минимальное значение -2 147 483 648, максимальное значение 2 147 483 647.

uint

Беззнаковый целый тип uint занимает в памяти 4 байта и позволяет выражать целочисленные значения от 0 до 4 294 967 295.

long

Целый тип long имеет размер 8 байт (64 бита). Минимальное значение -9 223 372 036 854 775 808, максимальное значение 9 223 372 036 854 775 807.

ulong

Целый тип ulong также занимает 8 байт и позволяет хранить значения от 0 до 18 446 744 073 709 551 615.

char ch= 12 ;
short sh=- 5000 ;
int in= 2445777 ;

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

//— бесконечный цикл
void OnStart ()
<
uchar u_ch;

for ( char ch=-128;ch <128;ch++)
<
u_ch=ch;
Print ( «ch = » ,ch, » u_ch = » ,u_ch);
>
>

Правильно будет так:

//— правильный вариант
void OnStart ()
<
uchar u_ch;

for ( char ch=-128;ch <=127;ch++)
<
u_ch=ch;
Print ( «ch = » ,ch, » u_ch = » ,u_ch);
if (ch==127) break ;
>
>

ch= -128 u_ch= 128
ch= -127 u_ch= 129
ch= -126 u_ch= 130
ch= -125 u_ch= 131
ch= -124 u_ch= 132
ch= -123 u_ch= 133
ch= -122 u_ch= 134
ch= -121 u_ch= 135
ch= -120 u_ch= 136
ch= -119 u_ch= 137
ch= -118 u_ch= 138
ch= -117 u_ch= 139
ch= -116 u_ch= 140
ch= -115 u_ch= 141
ch= -114 u_ch= 142
ch= -113 u_ch= 143
ch= -112 u_ch= 144
ch= -111 u_ch= 145
.

//— отрицательные значения нельзя хранить в беззнаковых типах
uchar u_ch=-120;
ushort u_sh=-5000;
uint u_in=-401280;

Шестнадцатеричные: цифры 0-9, буквы а-f или А-F для значений 10-15; начинаются с 0х или 0Х.

0x0A , 0x12 , 0X12 , 0x2f , 0xA3 , 0Xa3 , 0X7C7

Сколько памяти занимает int в C?

Запутался.
Win7x64, консоль, MinGW.
1. Почему адресация по 4 байта?
Ведь это выглядит как 32-ух разрядная система, хотя установлена х64.
2. Почему int занимает 4 ячейки (то есть 16 байт), а не 1 ячейку (то есть 4 байта) ?
Если так и есть, и минимальная ячейка памяти равна 4 байтам, то понятно, почему char-у приходится занимать 4 байта, а не 1 байт.

#include int main()< int A[2] = ; double B[2] = ; char C[2] = ; for (int i = 0; i < RANGE; ++i) < printf("%d %p\n", i, &A[i] ); >for (int i = 0; i < RANGE; ++i) < printf("%d %p\n", i, &B[i] ); >for (int i = 0; i < 4; ++i) < printf("%d %p\n", i, &C[i] ); >printf("long%d ", sizeof(long) ); printf("int%d ", sizeof(int) ); printf("char%d \n", sizeof(char) ); return 0; >
Массив с int 0 0028FF2C 1 0028FF30 Массив с double 0 0028FF18 1 0028FF20 Массив с char 0 0028FF16 1 0028FF17 long4 int4 char1

Распутался:
Не нужно путать логическую адресацию и размер ячейки памяти. Ячейка памяти здесь — 8 бит или 1 байт.
Адресация здесь осуществляется с помощью 32-ух бит, то есть от 00 00 00 00 до FF FF FF FF.

  • Вопрос задан более трёх лет назад
  • 4743 просмотра

Комментировать
Решения вопроса 1

15432

Системный программист ^_^

1. Чтоб узнать адресацию, напечатайте sizeof(void*) или любого другого указателя. Может оказаться, что программа действительно скомпилирована в х86
2. Все норм у вас, 4 байта на int, 1 байт на char. Каждая «ячейка» в 1 байт, а не в 4

Ответ написан более трёх лет назад
Нравится 1 4 комментария

Qubc

Qubc @Qubc Автор вопроса

массив int
0 0028FF2C — первый член
0028FF2D
0028FF2E
0028FF2F
1 0028FF30 — второй член

То есть первый член в массиве int занимает 4 ячейки памяти, каждая ячейка по байту.

Qubc

Qubc @Qubc Автор вопроса

Ячейки эв нашем случае 1 Байт.
Все ниже — верно?

Сколько можно адресовать таких ячеек 4 битами?
0000 Ячейка номер 0
0001 Ячейка номер 1
1111 Ячейка номер F
Итого — 2^4=16 однобайтных ячеек.
То есть 16 * 1 Байт = 16 Байт памяти.

Сколько ячеек 8 битами?
0000 0000 Ячейка 00
0000 0001 Ячейка 01
1111 1111 Ячейка FF
Итого — 2^8=256 однобайтных ячеек.
То есть 256 * 1 Байт = 256 Байт памяти.

Сколько ячеек 16 битами (или же 2 байтами)?
0000 0000 0000 0000 Ячейка 00 00
0000 0000 0000 0001 Ячейка 00 01
1111 1111 1111 1111 Ячейка FF FF
Итого — 2^16=65536 однобайтных ячеек.
То есть 65536 * 1 Байт = 65536 Байт = 65536 / 1024 = 64 килоБайт памяти.

Сколько ячеек 32 битами (или же 4 байтами)?
0000 0000 0000 0000 0000 0000 0000 0000 Ячейка 00 00 00 00
0000 0000 0000 0000 0000 0000 0000 0001 Ячейка 00 00 00 01
1111 1111 1111 1111 1111 1111 1111 1111 Ячейка FF FF FF FF
Итого — 2^32=4 294 967 296 однобайтных ячеек.
То есть 4 294 967 296 * 1 Байт = 4 294 967 296 Байт = 4 294 967 296 / 1024 = 4 194 304 килоБайт памяти.
4 194 304 / 1024 = 4096 мегаБайт = 4096 / 1024 = 4 гигабайта памяти.

Типы данных и int в программировании

Типы данных и int в программировании

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

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

Тип данных – это…

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

Типы отвечают за определение двух вещей:

  1. Диапазон (границы) допустимых значений. Пример – в Java поддерживаются две группы типов: целый и рациональный. Это связано с техническими особенностями работы устройств. В C++ их намного больше: дроби, символы, пустой тип, строки, целое число, числа с плавающей запятой двойной точностью.
  2. Набор операций, которые можно выполнять. Пример – умножение применяется для вида «целое число». Аналогичную операцию с текстом производить не имеет никакого смысла. Умножать «родитель» на «машина» – это бессмыслица.

Языки программирования умеют распознавать различные виды информации. Это значит, что Java и другие ЯП не позволяют умножать строчку на строчку. А вот целое число на другое целое или дробное – запросто.

Какими бывают виды информации: глобальная классификация

Любой код подразумевает оперирование электронной информацией. Она обладает собственной природой и может быть по-разному организована. Этот момент напрямую влияет на удобство работы с ней.

Глобально поделить все типы информации в Java и других языках разработки можно на:

  • примитивные – те, что предопределены в языке;
  • ссылочные – они могут быть созданы разработчиком самостоятельно.

Целые числа относятся к примитивным data types. Далее они будут рассмотрены более подробно.

Разновидности целых видов данных

Основным видом информации является целочисленный. Он обозначается как int (integer). Разрядность у него равна разрядности машинного слова процессора, на котором запущено приложение. Иногда необходимо пользоваться более «крупными» и «мелкими» разрядностями. Из-за этого возникла классификация целых.

Она включает в себя:

  • однобайтные целые – диапазон значений от -128 до +127 (8 бит);
  • короткие целые – диапазон от -32 768 до +32 767 (16 бит);
  • длинные целые – границы определяются в диапазоне от -2 147 483 648 до 2 147 483 647 (32 бита);
  • двойные длинные – границы являются определенными в пределах -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 (64 бита).

Для экономии памяти значения переменной integer может быть беззнаковым. Оно помечается как unsigned. Такие переменные позволяют увеличить maximum значение еще на единицу. Некоторые разработчики рекомендуют не пользоваться беззнаковыми целочисленными из-за отсутствия реализации в процессоре компьютера. Некоторые языки разработки не поддерживают работу с беззнаковыми типами. К числу таких можно отнести Java.

В C++

Целое число является базовым типом. Он встречается почти в каждом приложении и обозначает целые, подобно математическим значениям. В C++ integers представлены:

  1. Signed char – один символ. Занимает в памяти 1 байт. Максимальное значение составляет 127, минимальное – -127.
  2. Unsigned char. Хранит значения в диапазоне от 0 до 255.
  3. Char. Обозначает один символ в ASCII. Занимает 8 бит памяти и способно хранить значение в пределах от -127 до 127 или от 0 до 255.
  4. Short. Это целое число, максимальное значение которого составляет 32 767, а минимальное – -32 768. Занимает 16 бит и может обозначаться как short int, signed short int или signed short.
  5. Unsigned short – целочисленный тип со значениями от 0 до 65 535. Занимает 2 байта памяти.
  6. Integer – тип данных, встречающийся чаще всего. Максимальное значение его составляет 2 147 483 647, а минимальное – -2 147 483 648 при 4 байтах. Если оно занимает 2 байта, то показатели варьируются от -32 768 до 32 767. Он всегда больше или равен типу short, а также меньше или равен типу long.
  7. Unsigned int – положительное целое число. Может занимать 16 или 32 бита.
  8. Long type. Тип, который занимает 4 или 8 байта. Диапазон варьируется от -2 147 483 648 до 2 147 483 647 или от -9 223 372 036 854 775 808 до 9 223 327 036 854 775 807.
  9. Long long. Принимает значения от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807. Отнимает 64 бита или 8 байт.
  10. Unsigned long long.
  11. Unsigned long – определяется в пределах от 0 до 4 294 967 295. В памяти занимает 32 бита.

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

Операции над int

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

  1. Сравнение. Здесь допускается применение соотношения «равно» (=, ==), «не равно» (!=, <>), «больше» (>), «меньше» (<), «меньше или равно» (<=), «больше или равное» (>=№.
  2. Инкременты и декременты. Это арифметическое увеличение (++) или уменьшение (—) на единицу. Часто соответствующие операции выделены в отдельные манипуляции. Это связано с тем, что их используют счетчики.
  3. Сложение и вычитание (+ и -).
  4. Деление (/). Сюда же можно отнести получение остатка (%). Некоторые процессоры дают возможность проводить обе операции за одну инструкцию.
  5. Инверсия знака и получение абсолютного значения.
  6. Получение знака. Результатом часто выступает 1 для положительных значений числа, а также -1 для отрицательных. Нуль обозначается как 0.
  7. Возведение в степень (^).

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

По битам

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

  1. Битовый сдвиг вправо или влево.
  2. Уточнение знака по старшему биту. Это относится только к целым числам со знаком.
  3. Чтение и установку младшего бита. Используется для управления четностью.
  4. Побитовое «и» и «или».

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

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

Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в Otus !

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

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