Сколько бит ОЗУ занимает символьная переменная

Обновлено: 21.11.2024

CIS3355: Структуры бизнес-данных
Осень 2008 г.

Что вы должны знать, прежде чем мы начнем:

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

Теперь мы готовы начать, и чтобы представить наше объяснение того, как целые числа хранятся в ОЗУ, давайте начнем с анализа следующего объявления программы c:

int x = "J", y = 1145, z;

При вводе предыдущего объявления программа ищет доступное место для хранения данных.

НО ГДЕ ЭТИ ЗНАЧЕНИЯ БУДУТ ХРАНИТЬСЯ.

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

Если бы мы заглянули внутрь оперативной памяти, то увидели бы что-то похожее на это:

НО ЗАЧЕМ НУЖНЫ АДРЕСА 1254 И 1255, ЕСЛИ МЫ НИЧЕГО ТАМ НЕ СОХРАНИЛИ.

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

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

Единственное отличие состоит в том, что для целых чисел требуется 16 бит памяти, поэтому, чтобы сохранить символ как целое число, нам нужно будет добавлять нули перед первой единицей, пока мы не закончим 16 бит. Например, в этом случае символ J хранится как 00000000 01001010. Таким же образом мы можем распечатать целое число как символ, при этом мы будем смотреть на крайние правые 8 бит, определять хранящееся там числовое значение и распечатывать соответствующий символ ASCII.

Что произойдет, если мы присвоим значение, например 55 456, целочисленной переменной.

55, 456 — недопустимое значение, потому что помните, что целые числа берутся только из диапазона значений от -32 768 до 32 767. Однако c — это программа, которая даже при задании недопустимого значения будет выполнять операцию. В этой ситуации программа сделает следующее:

<р>1. Сначала он преобразует десятичное значение в двоичное:

<р>2. Затем он будет интерпретировать это число. Во-первых, поскольку первое число равно 1, оно кажется отрицательным.

<р>3. Затем для оценки мы берем два дополненных числа:

<р>4. Затем мы определяем значение 10011101100000 равным -10 080.

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

ЦЕЛЫЕ ЧАСТИ БЕЗ ЗНАКА; которые позволяют хранить значения от 0 до 65 535.

ДЛИННЫЕ; которые позволяют хранить значения от -2 147 483 648 до 2 147 483 647.

НЕ ПОДПИСАННЫЕ ДЛИННЫЕ СООБЩЕНИЯ; которые позволяют хранить значения от 0 до 4 294 967 296.

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

ПОЛЕЗНАЯ ИНФОРМАЦИЯ

Типы переменных.

< td align="left" width="311">-32 768 до 32 767 < tr align="left" rowspan="1">
Тип Размер Значения
короткое целое без знака 2 байта от 0 до 65 535
short int 2 байта
unsigned long int 4 байта от 0 до 4 294 967 295< /td>
long int 4 байта -2 147 483 648 до 2 147 483 647
int (16 бит) 2 байта -32 768 до 32 767
int (32 бита) 4 байта -2 147 483 648 до 2 147 483 647
целое число без знака (16 бит) 2 байта от 0 до 65 535< /td>
целое число без знака (32 бита) 2 байта от 0 до 4 294 967 295
char 1 байт 256 символов
float 4 байта от 1.2e-38 до 3.4e38
двойной 8 байт 2.2e-308 до 1.8e308

******ПРОВЕРЬТЕ СВОИ ЗНАНИЯ******

(Ответы внизу страницы)

Вопросы с несколькими вариантами ответов

1 . Если мы можем использовать только адреса 2653, 2654, 2655 и 2656, а адрес 2654 содержит числовое значение

значение 100. Если я запрошу unsigned int a='A', что произойдет?

a) используйте ячейку 2653 и 2655, поскольку для целых чисел требуется два байта, используется ячейка 2654.

b) используйте 2653, очистите ячейку 2654 и используйте их обе для хранения целого числа.

c) Это невозможно сделать, потому что целым числам нужны два смежных байта, а 'A' — это символ, который означает, что это только

требуется одно хранилище.

d) используйте 2655 и 2656 и сохраните двоичный файл

номер 0000 0000 0100 0001

2. Независимо от того, знаковые или беззнаковые, тип данных int требует ___________ памяти для каждой переменной.

А) Два байта

Б) Три байта

C) Шестнадцать бит

E) Ничего из вышеперечисленного

3 Если в двоичном коде значения 00011010 и 00111111 хранятся по адресам 2567 и 2568 соответственно, что

десятичное значение хранится по адресу 2568, если тип данных является целым числом?

а) 63, потому что это десятичное значение ASCII, связанное с двоичным значением 00111111.

c) 6719, потому что целые числа требуют 2 байта непрерывной памяти, поэтому оба адреса 2567 и 2568 должны быть

оценить, чтобы определить ответ.

г) Ничего из вышеперечисленного, у нас недостаточно информации для определения ответа.

Вопросы с краткими ответами

1. В чем разница между хранением символа и целого числа в оперативной памяти?

2. Можно ли хранить целое число в любом доступном месте в ОЗУ?

3. Как адрес переменной упоминается в ОЗУ?

4. Что произойдет, если я присвою отрицательное число переменной без знака? Рассмотрим следующую строку кода:

СВЯЗАННЫЕ ССЫЛКИ И ССЫЛКИ :

Ответы на вопросы для проверки ваших знаний.

Вопросы с несколькими вариантами ответов

Вопросы с краткими ответами

1. Целое число хранится так же, как символ в ОЗУ. Однако целое число требует больше места на 2 или 4 байта в зависимости от машины, а также непрерывной памяти для размещения целочисленного значения переменной.

<р> <я> 2. Да и НЕТ, целые числа могут храниться в любом доступном пространстве, если адреса в памяти непрерывны от начального байта до конечного байта.

<р> 3.Адрес переменной называется базовым местоположением переменной. Если у вас есть целое число, занимающее адреса 100 и 101, адрес переменной будет равен 100.

4. Отрицательное число будет оцениваться как битовая комбинация и присваиваться переменной. Затем значение этой переменной будет интерпретировано как число без знака. Таким образом, -1, чей битовый шаблон равен 11111111 11111111 (0xFF в шестнадцатеричном формате), будет оцениваться как беззнаковое значение 65,535< /tt>.

Компьютерная система обычно хранит символы, используя код ASCII. Каждый символ хранится с использованием восьми битов информации, что дает общее количество различных символов 256 (2**8 = 256).

Сколько символов может храниться в бите?

Сколько символов может хранить 16 бит?

В 16-битном целом числе может храниться 2 16 (или 65 536) различных значений. В беззнаковом представлении эти значения представляют собой целые числа от 0 до 65 535; с использованием дополнения до двух возможные значения находятся в диапазоне от −32 768 до 32 767.

Сколько памяти занимает персонаж?

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

Является ли символ размером 1 байт?

Поэтому каждый символ может иметь длину 8 бит (1 байт), 16 бит (2 байта), 24 бита (3 байта) или 32 бита (4 байта). Точно так же UTF-16 основан на 16-битных кодовых единицах. Следовательно, каждый символ может быть 16 бит (2 байта) или 32 бита (4 байта). Все UTF включают полный репертуар символов Unicode или набор символов.

Сколько значений может храниться в байте?

Как называется 16 бит?

BYTE — 8 бит без знака. СЛОВО – 16 бит, без знака. DWORD — 32 бита, без знака.

Что такое 16-битное число?

16-разрядный — это компьютерное аппаратное устройство или программа, способная передавать 16 бит данных за раз. Например, ранние компьютерные процессоры (например, 8088 и 80286) были 16-разрядными процессорами, то есть они могли работать с 16-разрядными двоичными числами (десятичные числа до 65 535).

Какой персонаж занимает больше всего памяти?

﷽, вероятно, занимает больше всего места.

Какой минимальный объем памяти для одного персонажа?

1 байт — это минимальное пространство, необходимое для хранения одного символа.

Много ли 1 ГБ памяти?

1 ГБ ОЗУ достаточно для основных операций, таких как просмотр веб-страниц (хотя не ожидайте запуска браузера с десятками открытых вкладок) и электронной почты, а также для обработки текстов и легкого редактирования изображений.

Сколько байтов занимает текстовый символ?

Символы могут иметь от 1 до 6 байт (некоторые из них могут быть не нужны прямо сейчас). Каждый символ UTF-32 имеет 4 байта. UTF-16 использует 16 бит для каждого символа и представляет только часть символов Unicode, называемых BMP (для всех практических целей этого достаточно). Java использует эту кодировку в своих строках.

В чем разница между байтом и символом?

Основное различие между типами данных byte и char заключается в том, что byte используется для хранения необработанных двоичных данных, а другие — для хранения символов или текстовых данных. С точки зрения диапазона, переменная byte может содержать любое значение от -128 до 127, а переменная char может содержать любое значение от 0 до 255.

Сколько байтов составляет буква?

Мы называем 8 бит байтом. В очень распространенной системе ASCII каждая буква алфавита, как заглавная, так и строчная (плюс знаки препинания и некоторые другие символы), соответствует числу от 0 до 255 (например, a=97, b=98 и т. д.), поэтому одна буква может быть выражен одним байтом. Таким образом, слово «Шеннон» занимает 7 байт.

скажите, пожалуйста, если я ошибаюсь, если число хранится в виде символа, оно будет содержать 1 байт на каждый символ числа (а не 4 байта)? например, если я создаю переменную int с числом 8 и переменную char с числом «8», переменная int будет потреблять больше памяти? и если я создам переменную int как число 12345 и массив символов «12345», массив символов будет потреблять больше памяти?

и в текстовых файлах, если числа хранятся, считаются ли они целыми числами или символами?

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

4 ответа 4

Да, все ваши ответы верны.

По поводу вашего последнего вопроса, IMO, можно подумать, что данные хранятся в виде байтов. char и int — это способ интерпретации байтов, поэтому в текстовых файлах вы пишете байты, но если вы хотите записать удобочитаемую цифру «8» в текстовый файл, вы должны запишите это в какой-нибудь кодировке, такой как ASCII, где байты соответствуют удобочитаемым символам.Итак, чтобы записать «8», вам нужно записать байт 0x38 (значение ASCII 8 ).

Итак, в файлах у вас есть данные, а не int или символы.

Когда мы рассматриваем место в памяти для int или char, мы думаем как единое целое. Целые числа обычно хранятся с использованием слова памяти, которое составляет 4 байта или 32 бита, поэтому целые числа от 0 до 4 294 967 295 (232 - 1) могут храниться в переменной типа int. Поскольку нам нужно всего 32 бита (32/8 = 4), следовательно, нам нужно 4 байта для переменной типа int.

Но для хранения символа ascii нам нужно 7 бит. Таблица ASCII содержит 128 символов со значениями от 0 до 127. Таким образом, для представления символа в ASCII достаточно 7 бит; (Однако большинство компьютеров обычно резервируют на 1 бит больше (т. е. 8 бит) для символа ASCII

И по поводу вашего вопроса:-

а если я создам переменную типа int как число 12345 и массив символов "12345", массив символов займет больше памяти?

Да, исходя из приведенного выше определения, это правда. В первом случае (значение int) требуется всего 4 байта, а во втором случае всего 5 байт. Причина в том, что в первом случае 12345 — это одно целое число, а во втором случае «12345» — всего 5 символов ascii. Даже во втором случае вам потребуется еще один байт для хранения символа '\0' как части строки (отмечает конец строки).

В основной памяти (или просто в памяти) хранятся переменные и другая информация во время работы программы. Иногда ее называют оперативной памятью для оперативной памяти. С точки зрения программы память компьютера представляет собой набор байтов, каждый из которых имеет целочисленный адрес. Например, есть байт с адресом 1, другой с адресом 2 и т. д., вплоть до очень большого числа. Программа может получить текущее содержимое байта по заданному адресу памяти и сохранить заданное значение в этом байте.

В байте всего 8 бит. Большинство элементов данных, которые вы используете, больше, чем это. Например, значение типа int обычно имеет длину 32 бита, поэтому оно занимает 4 байта. Программа обращается к блоку памяти, используя адрес первого байта в блоке. Например, целое число, хранящееся в байтах 1000–1003, имеет адрес 1000.

Указатели и адреса памяти как значения

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

С точки зрения машинного языка указатель аналогичен длинному целому числу (32 или 64 бита, в зависимости от типа исполняемой программы). Таким образом, программа может рассматривать указатель как информацию так же, как целое число как информацию.

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

Значение типа int* — это указатель на место в памяти, в котором хранится значение типа int. Если считается, что адрес памяти 1000 имеет тип int*, то память по адресам 1000–1003 содержит значение типа int.

Значение типа double* — это указатель на место в памяти, где хранится значение типа double.

Значение типа char* – это указатель на место в памяти, где хранится значение типа char. Таким образом, это относится к одному байту.

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

Получение адреса переменной

Если x — переменная, тогда &x — это адрес, по которому хранится x. Таким образом, переменная p содержит адрес переменной v. Обратите внимание, что если v имеет тип T, то &v имеет тип T*.

Нулевой указатель

Адрес памяти 0 называется нулевым указателем. Вашей программе никогда не разрешается просматривать или сохранять что-либо по адресу памяти 0, поэтому нулевой указатель — это способ сказать «указатель ни на что». Обратите внимание, что нулевой указатель — это не то же самое, что нулевой символ; не путайте их.

Запишите нулевой указатель как NULL в своей программе. Например, создает переменную-указатель p и заставляет ее хранить адрес памяти 0.

Оказывается, NULL на самом деле не является частью C++. Он добавляется с помощью препроцессора, определяя его в определенных заголовочных файлах, в том числе в , . Чтобы обойти эту неприятность, в новейшей версии C++ определена константа nullptr, которая является нулевым указателем. Но многие компиляторы этого еще не осознают. Пожалуйста, просто используйте NULL. (необязательно)

Введите void*

Значение типа void* является указателем на объект неизвестного типа. Этот тип используется в некоторых местах, где программа должна помнить, где что-то хранится, не зная, на что оно указывает. Константа NULL определяется как (void*)(0). То есть преобразовать 0 в тип void*.

Упражнения

Что хранится в переменной типа long*? Ответить

Предположим, что w — это переменная типа long. Напишите оператор, который создает переменную q типа long* и заставляет q хранить адрес переменной w. Ответить

Читайте также: