Примечание: я не знаю правильного ответа, но ниже приведены только мои личные предположения!
Как уже упоминалось, 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!