Сколько байт весит один символ

Сколько байт весит один символ

ASCII например. . там чисто 1 байт символ? например 0x20 это сам код символа. . а не код отображения да?

0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF — а это код для отображения да? 8 байт.. . да?

Если отображать ASCII символ в битах, которых целых 8 штук в байте, то будет все выглядить так (в двоичной системе)
1000010 00001001 1000011

Автор SA-Corp. задал вопрос в разделе Другие языки и технологии

Сколько весит 1 символ. ) и получил лучший ответ

Ответ от Alexandr Fomenko[новичек]
В любой кодовой странице (кроме юникода) символ весит 1 байт. А вот чтобы его отобразить в графическом виде на экране, например в квадратике 8 точек на 8 точек, нужно 64 бита экранной памяти (памяти видеокарты) , то есть 8 байт.
Alexandr Fomenko
Ученик
(178)
Пожалуйста. Небольшое пояснение. Один байт нежен в случае монохромного дисплея, а в случае цветного надо учесть, что каждая точка символа имеет определенный цвет, который может иметь, например, глубину 24 байта для отображения только одной точки.

Существует 2 типа строк:

Типа С.
Тип Паскаль.

К языкам это не имеет отношения: язык Паскаль может использовать строки типа С, язык С может использовать строки типа Паскаль. Название просто исторически возникло, т.к. изначально в С и Паскале были только одного вида строки (разные, такие как описано ниже).

Строка типа С — это массив байтов, заканчивающийся нулем. То есть строка не может содержать символ с кодом 0 (не числом 0, а символ с кодом 0, нулевой байт). Длина строки всегда = количество символов + 1 байт (с нулевым кодом) в конце строки.

Строка типа Паскаль в начале хранит 1 байт, указывающий длину строки, затем идет массив символов. Строка может содержать внутри себя символы с кодом 0. Но не может быть длиннее 255 байт. В памяти такая строка занимает те же что и С = число символов в строке + 1 байт в начале, хранящий её длину.

Читайте также:  Диспетчер задач не видит видеокарту nvidia

А еще есть строки UNICODE, UTF8, строки типа Паскаль, где длина указана 2-мя байтами (т.е. максимальная длина 65535 символов в строке).

Длина таких строк в байтах может быть очень и очень разной. Совсем не соответствующей числу символов. Разница будет не на 1 байт (как в простых строках типа С и типа Паскаль). Более того, например, в UTF8 длина строки в байтах будет зависеть от того, что именно написано. )))

В наше время я настоятельно рекомендую изучать не простые char, а обратить внимание именно на UNICODE.
А там вовсе не один байт на один символ. )))))

В памяти такая строка занимает те же что и С = число символов в строке + 1 байт в начале, хранящий её длину.

Максимальная длина — 255 символов.
А в C максимальная длина — 4294967295 символов (вместимость size_t).

К тому же, благодаря такому устройству, в C-строках можно гулять туда-сюда с помощью указателя.

У вас совершенно не внятное замечание. Ну включим "зануда-mode":

1. С помощью указателя можно гулять по ЛЮБОЙ строке. Более того, зная сразу, где конец строки без того, что проверять все байты на 0, гулять по строке типа Паскаль проще, чем по строке типа С.

2. Зачем вам на практике 4204067. ? Если речь идет о текстовом редакторе, то там совсем по другому организовано хранение. Не в одной строке.

3. Разве что в примитивных текстовых редакторах можно все запихнуть в одну строку. Но при попытке редактировать в таком редакторе большой файл вы стазу же столкнетесь с большими задержками при самых обычных операциях вставки-удаления символов в/из середину.

4. Если тебе нужно работать со строками такой длины 4204067. то для строки типа Паскаль никто не мешает использовать не 1 (ограничение на максимальную длину 255), а 4 байта для хранения длины. Что? На 3 байта больше приходится тратить оперативной памяти? И это-то при общей длине строки 4 гигабайта? Ты серьезно считаешь это недостатком?

Читайте также:  Выберите средство восстановления windows 7

5. Что? В строка типа Паскаль можно хранить на 3 полезных байта меньше? При длине строки 4204067. ты считаешь это важным? Хорошо. Храним строку в структуре — отдельно размер, отдельно указатель на саму строку. В этом случае строка, размер которой определяется не наличием 0 в конце, а длина которой храниться отдельно позволяет хранить строки более длинные на 1 байт. Кому только это надо.

5. То, что ты сразу знаешь длину, а тебе не нужно бегать и считать, ища ноль — преимущество по скорости для многих типовых операций. А если действительно используются возможности по максимуму, то есть работаем с гигантскими строками 4204067. то искать конец строки в такой строке — просто глупо. Лучше знать заранее.

6. В строке нельзя хранить 0. Как показывает практика, если уж речь идет о строках такой длины как 4295967. то это скорее всего уже не обычный текст, а какие-то данные не текстовые, просто хранимые в виде строкоподобного массива, а там запросто и 0 может встречаться внутри строки, что делает невозможно использование обычной строки для хранения таких длинных строк с данными.

7. Вывод: число 4204067. хорошо попонтоваться, что "я знаю такую штуку как size_t", а фактически практической пользы от этого мало.

1. С помощью указателя можно гулять по ЛЮБОЙ строке.

С помощью указателя можно гулять по нескольким строкам, сложенным друг за другом.
В Паскале это всё будет снова молиться на размер одной строки.

2. Зачем вам на практике 4204067. ? Если речь идет о текстовом редакторе, то там совсем по другому организовано хранение. Не в одной строке.

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

3. Разве что в примитивных текстовых редакторах можно все запихнуть в одну строку.

Я бы не стал так делать, потому что оно не пройдёт тест на огромный файл.

4. Если тебе нужно работать со строками такой длины 4204067. то для строки типа Паскаль никто не мешает использовать не 1 (ограничение на максимальную длину 255), а 4 байта для хранения длины.

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

5. Что? В строка типа Паскаль можно хранить на 3 полезных байта меньше? При длине строки 4204067. ты считаешь это важным?

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

А если действительно используются возможности по максимуму, то есть работаем с гигантскими строками 4204067. то искать конец строки в такой строке — просто глупо.

Ссылка на основную публикацию
Скайп не приходят сообщения
Общение – основная цель любого мессенджера, и Скайп – не исключение. Бывает, что сообщения в Скайпе не отправляются – эта...
Сборка пк без корпуса
Если серьезно, то компьютер без корпуса работать может и даже будет, но это достаточно опасно, особенно когда вы плохо понимаете...
Сборка пк на райзен 3 1200
Socket AM4, 4-ядерный, 3100 МГц, Turbo: 3400 МГц, Summit Ridge, Кэш L2 - 2048 Кб, Кэш L3 - 8192 Кб,...
Скайп предыдущие версии с официального сайта
На данной странице представлены все версии Скайп для компьютера (полноценные инсталляторы скаченные с официального сайта) и телефона, выпущенные за последние...
Adblock detector