Я думаю, что ваш вопрос основан на представлении о том, что, учитывая представление целого числа, строки или другого типа значения, вы можете определить тип и значение. Вы не можете.
В большинстве цифровых компьютерных архитектур данные представляют собой биты, доступ к которым осуществляется в смежных 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