Сколько памяти занимает один символ

Обновлено: 21.11.2024

Байты часто используются для хранения отдельных символов в текстовом документе. В наборе символов ASCII каждому двоичному значению от 0 до 127 соответствует определенный символ. Большинство компьютеров расширяют набор символов ASCII, чтобы использовать весь диапазон из 256 символов, доступных в байте. Верхние 128 символов используются для обработки особых вещей, таких как символы с диакритическими знаками в распространенных иностранных языках.

Вы можете увидеть 127 стандартных кодов ASCII ниже. Компьютеры хранят текстовые документы как на диске, так и в памяти, используя эти коды. Например, если вы используете Блокнот в Windows 95/98 для создания текстового файла, содержащего слова «Четыре балла и семь лет назад», Блокнот будет использовать 1 байт памяти на каждый символ (включая 1 байт на каждый символ пробела между словами). -- символ ASCII 32). Когда Блокнот сохраняет предложение в файле на диске, этот файл также будет содержать 1 байт на символ и на пробел.

Проведите такой эксперимент: откройте новый файл в Блокноте и вставьте в него предложение "Четыре балла и семь лет назад". Сохраните файл на диск под именем getty.txt. Затем используйте проводник и посмотрите на размер файла. Вы обнаружите, что размер файла на диске составляет 30 байт: по 1 байту на каждый символ. Если вы добавите еще одно слово в конец предложения и сохраните его повторно, размер файла увеличится до соответствующего количества байтов. Каждый символ занимает один байт.

Если бы вы посмотрели на файл так, как на него смотрит компьютер, вы бы обнаружили, что каждый байт содержит не букву, а число — число — это код ASCII, соответствующий символу (см. ниже). Итак, на диске номера файла выглядят так:

Посмотрев в таблицу ASCII, вы увидите однозначное соответствие между каждым символом и используемым кодом ASCII. Обратите внимание на использование 32 для пробела — 32 — это код ASCII для пробела. Мы могли бы преобразовать эти десятичные числа в двоичные числа (то есть 32 = 00100000), если бы хотели быть технически правильными — именно так компьютер действительно работает с вещами.

Мы часто слышим такие слова, как гигабайт (ГБ) и терабайт, но что на самом деле мы можем сделать с таким объемом памяти? На самом базовом уровне вычислений у нас есть биты, которые будут либо 1, либо 0. Байт — это 8 бит. Мы собираемся представить байт в виде этой точки:

4 байта — это память, необходимая для хранения 1 символа, поэтому 1 байт — довольно хорошая отправная точка. На одной странице текста около 500 символов. Мы можем заменить 500 символов на 2000 байт, или около двух килобайт памяти.

Если мы делаем визуальное представление, это 2000 точек.

Это всего 2 килобайта памяти. Всего за 1 страницу текста. Что происходит, когда мы смотрим роман? 40000 слов — это примерно 80 страниц текста или 160 килобайт памяти. Давайте посмотрим, как это выглядит в виде точки.

Вау! Это много точек, но с точки зрения компьютерной памяти это небольшая игра. Перейдем сразу к 1 мегабайту (МБ) памяти. 1 мегабайт — это примерно 6 секунд несжатого аудио, 1 минута аудио в формате MP3 со скоростью 128 кбит/с или 500-страничная книга. Мегабайт равен 1000 килобайт (КБ). Вот как это выглядит в виде точки:

Это 1 миллион байт. Но на самом деле это не так много памяти для нетекстовых приложений. 1 минута аудио на самом деле не доставляет особого удовольствия. 4 мегабайта — это размер картриджа Nintendo 64, CD-ROM — 700 мегабайт (42 минуты несжатого аудио). Гигабайт — это то, с чего мы начинаем переходить к более «стандартному» хранилищу.

На точечных диаграммах при увеличении масштаба можно увидеть отдельные точки на мегабайтах. В гигабайтах это невозможно. Количество точек у нас увеличилось на 1000. Это очень много памяти, в 1 ГБ 1 миллиард байт, а в каждом байте 8 бит, значит, в 1 ГБ 8 миллиардов бит памяти (ВАУ!). Несмотря на все это волнение, 1 ГБ на самом деле не так много памяти, в современных терминах это уже не так. В предыдущем сообщении в блоге я сфотографировал наши USB-накопители.

Много памяти.

Я хотел, чтобы вы могли увеличить каждую отдельную точку, но мой компьютер сильно тормозил в диапазоне 160 КБ, поэтому мне пришлось изменить размер всего.

Каждый из них имеет 4 или 8 гигабайт памяти, поэтому, если вы посмотрите на него, все они имеют точечную диаграмму гигабайта и как минимум в 4 раза больше.
Для сравнения, Google проиндексировал 200 терабайт (1 терабайт равен 1000 гигабайтам) Интернета. По их оценкам, это всего лишь 0,004% всего Интернета, то есть около 5 000 000 терабайт памяти. Пять миллионов терабайт — это 5000 петабайт.

Означает ли это, что 1 байт может содержать только один символ? Например:

и если у tiny int есть диапазон от 0 до 255, означает ли это, что его можно хранить с 255 символами?

что хранится

какой будет диапазон 0-10

Байт — это наименьшая единица данных в системе. Как правило, 1 байт = 1 символу ASCII. 2 байта = 1 символ UTF-16. Байт без знака может устареть от значений 0–255.

Посылка этого вопроса совершенно неверна. Байт не определяется как 8 бит, то есть октет. Байт — это наименьший адресный размер данных в архитектуре.

4 ответа 4

1 байт может содержать 1 символ. Например: обратитесь к значениям Ascii для каждого символа и преобразуйте их в двоичные. Вот как это работает.

Размер Tiny Int = 1 байт (от -128 до 127)

Int = 4 байта (от -2147483648 до 2147483647)

Да, 1 байт кодирует символ (включая пробелы и т. д.) из набора ASCII. Однако в единицах данных, предназначенных для кодировки символов, на практике может и часто требуется до 4 байтов. Это потому, что английский не единственный набор символов. И даже в англоязычных документах часто представлены другие языки и символы. Их очень много, и есть очень много других наборов кодировок, о которых вы, возможно, слышали, например. БИГ-5, УТФ-8, УТФ-32. Большинство компьютеров в настоящее время допускают такое использование и обеспечивают наименьшее количество искаженного текста (что обычно означает отсутствующий набор кодировок). 4 байта достаточно, чтобы покрыть эти возможные кодировки. I байт на символ не позволяет этого, и при использовании он часто превышает 4 байта на возможный символ для всех кодировок, а не только для ASCII. Окончательному символу может потребоваться только байт для работы или представления на экране, но для этого требуется, чтобы 4 байта были расположены в довольно обширной глобальной кодировке «работает».

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

2^8 = 256 символов. Символ в двоичном формате — это последовательность из 8 (0 или 1).

Я считаю, что существует путаница, что 1 байт может содержать 256 символов - это не может, а скорее, что 1 символ может иметь 256 опций/вариаций/символов (a,b,c или. ) - если только символ использует 1 байт. Если для этого требуется больше байтов, таких как юникод, тогда это позволит использовать больше параметров символов, что, конечно же, требует юникод. Точно так же, как 1 байт может содержать 256 «параметров», вы можете хранить любое число от 0 до 255 в 1 байте как одно число, но это не означает, что вы получите 255 различных чисел.

Например: одна буква (например, 'e') занимает байт. Занимает ли более сложный символ (например, китайский) больше места?

Я заметил, что азиатские сайты загружаются дольше, чем англоязычные.

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

Самая старая широко используемая кодировка называется ASCII, в которой на символ требуется 7 бит. Один байт = 8 бит, поэтому ASCII соответствует одному байту на символ. ASCII может кодировать простой текст на английском языке, но не может обрабатывать знаки ударения или другие неанглийские символы в европейской латинице, не говоря уже о сценариях из-за пределов Западной Европы.

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

Современным решением является Unicode, который представляет собой общий набор символов, охватывающий максимально возможное количество языков, а также семейство различных кодировок. Обе наиболее распространенные кодировки Unicode используют систему переменной длины:

UTF-8: символы занимают 1, 2, 3 или 4 байта. Символы ASCII помещаются в один байт; большинство не-ASCII-алфавитов умещаются в два байта; обычные китайские, японские и корейские иероглифы умещаются в три байта; очень необычные символы (например, иероглифы) занимают 4 байта.

UTF-16: символы занимают 2 или 4 байта. ASCII, алфавитные и обычные символы CJK занимают 2 байта; очень необычные занимают 4 байта.

Поэтому на ваш вопрос нет однозначного ответа. В UTF-8 «a» занимает один байт, «á» — два и «人» — три, но в UTF-16 все три занимают два байта. Однако я бы сказал, что кодировка UTF-8 более распространена.

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