Почему шестнадцатеричные числа префиксны как 0x
?
Я понимаю использование префикса, но я не понимаю значения того, почему был выбран 0x
.
Почему шестнадцатеричные числа с префиксом 0x?
Ответ 1
Рассказ: 0
сообщает парсеру, что он имеет дело с константой (а не с идентификатором/зарезервированным словом). Что-то еще необходимо для указания базы чисел: x
- произвольный выбор.
Длинная история:. В 60-е годы системы с числовым программным номером были десятичными и восьмеричными - мэйнфреймы имели 12, 24 или 36 бит на каждый байт, который делительно делится на 3 = log2 (8).
Язык BCPL использовал синтаксис 8 1234
для восьмеричных чисел. Когда Кен Томпсон создал B из BCPL, вместо этого он использовал префикс 0
. Это здорово, потому что
- целочисленная константа теперь всегда состоит из одного токена,
- анализатор все равно может сразу сказать, что он получил константу,
- синтаксический анализатор может сразу указать базу (
0
то же самое в обоих базах), - он математически нормальный (
00005 == 05
) и - не нужны специальные специальные символы (как в
#123
).
Когда C был создан из B, возникла необходимость в шестнадцатеричных числах (PDP-11 имел 16-битные слова), и все вышеперечисленные пункты были по-прежнему действительны. Поскольку восьмеричные все еще нужны для других машин, 0x
был произвольно выбран (00
, вероятно, был исключен как неудобный).
С# является потомком C, поэтому он наследует синтаксис.
Ответ 2
Примечание: я не знаю правильного ответа, но ниже это только мои личные предположения!
Как уже упоминалось, 0 перед номером означает его восьмеричное:
04524 // octal, leading 0
Представьте себе, что нужно придумать систему для обозначения шестнадцатеричных чисел, и обратите внимание, что мы работаем в среде стиля C. Как насчет окончания с h как сборка? К сожалению, вы не можете - это позволит вам делать токены, которые являются действительными идентификаторами (например, вы могли бы назвать переменную одинаковой), что сделало бы для некоторых неприятных двусмысленностей.
8000h // hex
FF00h // oops - valid identifier! Hex or a variable or type named FF00h?
Вы не можете привести с символом по той же причине:
xFF00 // also valid identifier
Использование хэша, вероятно, было выброшено из-за конфликта с препроцессором:
#define ...
#FF00 // invalid preprocessor token?
В конце концов, по какой-то причине, они решили поставить x после того, как ведущий 0 обозначил шестнадцатеричный. Он недвусмыслен, так как он все еще начинается с символа числа, поэтому не может быть допустимым идентификатором и, вероятно, основан на восьмеричном соглашении ведущего 0.
0xFF00 // definitely not an identifier!
Ответ 3
ПРОСТОЙ
Это префикс, указывающий, что число находится в шестнадцатеричном, а не в некоторой другой базе. Язык программирования C использует его для компиляции.
Пример:
0x6400
переводится на 6*16^3 + 4*16^2 + 0*16^1 +0*16^0 = 25600.
Когда компилятор читает 0x6400
, он понимает, что число является шестнадцатеричным с помощью термина 0x. Обычно мы можем понять (6400) 16 или (6400) 8 или что-то еще.
Для Двоичного это будет
0b00000001
Надежда Помогла каким-то образом.
Добрый день,
Ответ 4
Предыдущее значение 0 используется для обозначения числа в базе 2, 8 или 16.
По-моему, 0x был выбран для обозначения hex, потому что 'x' звучит как hex.
Просто мое мнение, но я думаю, что это имеет смысл.
Добрый день!