Таблица ASCII и представление символов

Мы узнаем в классе о таблице ASCII и о том, что каждый символ из 128 символов имеет уникальный номер от 0 до 128, представляющий его. Например, «а» — это 97 (в двоичном формате 97 — это 1100001). «%» — это 37 (и в двоичном формате 37 — это 0100101). (Я понимаю, что для фиксированной длины 7 мы должны разрешить двоичное число начинаться с 0)

Если 97 представляет собой «а», то что представляет собой строка «97»? Что представляет собой целое число 97?


person eran gal    schedule 28.01.2018    source источник


Ответы (3)


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

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

Итак, учитывая байт 97 (десятичный), скажем, из 1-байтового файла или по адресу памяти, каков его тип и значение? Единственный способ узнать это — через какое-то общее понимание: соглашение, декларацию, конвенцию, спецификацию, карту данных и т. д. Другими словами, общение. Полная коммуникация состоит из данных и сопутствующих или отдельных метаданных, которые указывают, как интерпретировать байты.

97₁₀ = 61₁₆ = 01100001₂ может быть:

  • В виде 8-битного целого числа без знака: 97₁₀
  • Как 8-битное целое число со знаком в дополнении до двух: 97₁₀
  • Как единица кода UTF-8: все единицы кода для кодовой точки Unicode: 'a' (U+0061) 'СТРОЧНАЯ ЛАТИНСКАЯ БУКВА A'
  • Как кодовая единица ASCII: (все кодовые точки ASCII занимают одну 8-битную кодовую единицу): 'a'
  • Как кодовая единица ISO 8859-1: (все кодовые точки ISO 8859-1 занимают одну 8-битную кодовую единицу): 'a'
  • Все, что можно упаковать в 8 бит.

Итак, перефразируя ваш вопрос так: в чем разница между 97, представляющим «а», и 97, представляющим целое число 97? Ответ находится в метаданных, а не в байтах.

person Tom Blodget    schedule 28.01.2018

Что ж, строка «97» состоит из двух символов, поэтому потребуются два кода ascii: один для «9», а другой для «7».

Значит ответ 57 и 55

person dbl4k    schedule 28.01.2018
comment
Спасибо за ваш быстрый ответ! так что вы имеете в виду, что строка 97 представлена ​​​​двоичным числом: 01110010110111 (просто написал двоичное представление 57 слева от двоичного представления 55), но тогда, как насчет целого числа 7351. в двоичном виде представлено тем же 01110010110111 , как компьютер узнает, что из них я имею в виду? - person eran gal; 28.01.2018
comment
Следует помнить, что когда вы сохраняете числа или любые другие символы в строке, строка представляет собой просто набор символов. Строка 7351 будет представлена ​​десятичными кодами ascii 55 51 53 49. попробуйте эту ссылку преобразование единиц/ascii - person dbl4k; 28.01.2018
comment
@erangal Компьютеру все равно. Вы говорите ему, что делать. Компьютер обрабатывает только числа и делает с ними все, что вы хотите. - person Sami Kuhmonen; 28.01.2018
comment
@dbl4k dbl4k, а как насчет хранения 97 в виде целого числа? компьютер хранит его как 1100001, но с типом целого числа? - person eran gal; 28.01.2018
comment
Сохранение в виде целочисленного типа работает иначе, чем строк, поскольку целые числа не хранятся в виде последовательности символов. Значение 97 не будет представлено ascii, но, как вы сказали, все значение может быть представлено двоичным значением 1100001. - person dbl4k; 28.01.2018

Значение ASCII возвращается только тогда, когда мы используем char или приводим любое значение unsigned int к типу char. Итак, согласно вашему вопросу, 97 может быть представлено типом данных int. Но если вы хотите 97 символов, вам следует написать следующий код:

char c[2], i;
c[0]=57;
c[1]=55;
for (i=0; i<2; i++) printf("%c", c[i]);
person Deepak Raj    schedule 28.01.2018