Почему шестнадцатеричные числа имеют префикс 0x?
почему шестнадцатеричные числа имеют префикс 0x
?
Я понимаю использование префикса, но я не понимаю значения why .
4 ответов
краткий сюжет: на 0
сообщает синтаксическому анализатору, что он имеет дело с константой (а не с идентификатором/зарезервированным словом). Что-то еще нужно, чтобы указать базу чисел:x
- это произвольный выбор.
долгая история: в 60-х годах преобладающими системами программирования были decimal и восьмеричной - мэйнфреймы имели 12, 24 или 36 бит на байт, что хорошо делится на 3 = log2(8).
язык BCPL используется синтаксис 8 1234
для восьмеричных чисел. Когда Кен Томпсон создал B из BCPL, он использовал 0
префикс вместо этого. Это здорово, потому что
- целочисленная константа теперь всегда состоит из одной лексемы,
- парсер все еще может сразу сказать, что у него есть константа,
- парсер может сразу сказать базе (
0
одинаково в обеих базах), - это математически вменяемый (
00005 == 05
), и - не тужься необходимы специальные символы (как в
#123
).
Когда C был создан из B, возникла необходимость в шестнадцатеричных числах (PDP-11 имел 16-битные слова), и все вышеперечисленные точки были по-прежнему действительны. Поскольку окталы все еще были нужны для других машин,0x
был произвольно выбран (00
, вероятно, был исключен как неудобный).
C# является потомком C, поэтому он наследует синтаксис.
примечание: Я не знаю правильного ответа, но ниже-это только мои личные домыслы!
как уже упоминалось, 0 перед числом означает, что оно восьмеричное:
04524 // octal, leading 0
представьте, что вам нужно придумать систему для обозначения шестнадцатеричных чисел, и обратите внимание, что мы работаем в среде стиля C. Как насчет окончания сборки h like? К сожалению, вы не можете - это позволит вам сделать токены, которые являются действительными идентификаторами (например. можно назвать переменную то же самое), что сделало бы некоторые неприятные двусмысленности.
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!
простой
это префикс, указывающий, что число находится в шестнадцатеричном, а не в какой-либо другой базе. Язык программирования C использует его для передачи компилятору.
пример :
0x6400
переводится как 6*16^3 + 4*16^2 + 0*16^1 +0*16^0 = 25600.
Когда компилятор читает 0x6400
, Он понимает, что число шестнадцатерично с помощью 0x термин. Обычно мы можем понять (6400)16 или (6400)8 или что ..
на Бинарные будет
0b00000001
Надежда каким-то образом помогла.
Добрый день,
предыдущий 0 используется для указания числа в базе 2, 8 или 16.
на мой взгляд, 0x был выбран для обозначения hex, потому что " x " звучит как hex.
только мое мнение, но я думаю, что это имеет смысл.
Добрый День!