所有这些时间之后,我从未想过问这个问题。我了解这来自C ++,但是背后的原因是什么:

  • 按照往常来指定小数号
  • 通过领先0指定八分音数字
  • 通过领先的0x指定十六进制数字

为什么0?为什么要0x?基本32有天然进展吗?

有帮助吗?

解决方案

C,C ++和Java的祖先,最初是由Dennis Richie在70年代初期在PDP-8上开发的。那些机器有一个 12位地址空间, ,因此指针(地址)长12位,最方便地用代码表示三个4位八分位数(第一个可寻址的单词将是000 octal,最后一个可寻址的单词777octal)。

八分位数不能很好地映射到8位字节,因为每个八分位数代表三个位,因此八分位数中总会有多余的位数。全真实比特字节(1111 1111)的八十七个为377,但在十六进制中为ff。

十六进制对大多数人的脑海中的转换和从二进制中的转换更容易,因为二进制数通常以八个块表示(因为那是一个字节的大小),而八个二进制数字恰好是两个十六进制数字,但是十六进制的符号将是笨拙的。并在丹尼斯的时代误导(意味着解决16位的能力)。程序员在使用硬件时需要考虑二进制(每个位代表物理线)以及使用位逻辑(每个位都具有程序员定义的含义)时。

我想丹尼斯将0个前缀添加为日常小数数字上最简单的变化,对于那些早期解析器来说,最容易区分。

我相信HEX符号0x__稍后添加到C中。编译器解析树以区分1-9(十进制常数的第一个数字),0(第一个[八分位数的[不重要]数字)和0x(表明在后续数字中遵循的十六进制常数)彼此之间相当大得多复杂不仅是使用引导0作为指示器从后续数字切换为八分位数而不是十进制的指标。

丹尼斯为什么要这样设计? 当代程序员 不要欣赏那些早期的计算机通常是通过将指令在CPU前面板上的物理翻转开关或打孔卡或纸带胶带上的物理翻转开关来控制到CPU的;保存几个步骤或说明的所有环境都代表了大量体力劳动的节省。此外,内存有限且昂贵,因此即使节省一些说明也具有很高的价值。

总结:0,八进制是因为它有效地解析,并且八进制对PDP-8的用户友好(至少用于地址操作)

六角形的0x可能是因为它是八进制前缀标准上的天然和向后兼容的延伸,并且仍然相对有效地解析。

其他提示

八八元的零前缀和十六进制的0x来自UNIX的早期。

八分之一存在的原因可以追溯到有6位字节的硬件时,这使八位成为自然的选择。每个八分位数代表3位,因此6位字节为两个八分位数。六角字节的十六进制也是如此,其中十六进制的数字为4位,因此一个字节为两个十六进制数字。使用八位字节八位字节需要3个八分位数,其中第一个只能具有0、1、2和3的值(第一个数字确实是“四分法”,而不是八分位数)。没有理由去Base32,除非有人开发了一个字节长的系统长度长,因此可以将十位字节表示为两个5位“ nybbles”。

“新”数字必须从数字开始,才能使用现有语法。

既定的实践都有可变名称和其他标识符,从字母开始(或其他一些符号,也许突出或美元符号)。因此,“ A”,“ ABC”和“ A04”都是名字。数字从数字开始。因此,“ 3”和“ 3E5”是数字。

当您将新内容添加到编程语言中时,您试图使它们适合现有语法,语法和语义,并尝试使现有代码继续工作。因此,您不想更改语法以使“ X34”成为十六进制数字或“ O34”一个八十个数字。

那么,如何将八进制数字拟合到该语法中?有人意识到,除了“ 0”之外,不需要以“ 0”开头的数字。没有人需要为123的“ 0123”编写“ 0123”。因此,我们使用领先的零表示八进制数字。

十六进制数字呢?您可以使用后缀,因此“ 34倍”表示3416. 。但是,然后,解析器必须一路读取到数字的末尾,然后才知道如何解释数字(除非它遇到“ a”到“ f”数字之一,否则这当然会指示十六进制)。在解析器上知道数字是十六进制的早期。但是您仍然必须从数字开始,并且已经使用了零技巧,因此我们需要其他东西。选中了“ X”,现在我们有“ 0x”用于十六进制。

(以上是基于我对解析和关于语言发展的一般历史的理解,而不是根据编译器开发人员或语言委员会做出的特定决定的知识。)

我不知道 ...

0用于0ctal

0x是为了,我们已经使用0来表示八进制,并且十六进制中有一个X

至于自然发展,最好看最新的编程语言,这些语言可以贴上诸如

123_27(解释_表示意思下标)

等等

?

标记

基本32有天然进展吗?

这就是ADA使用表格16#引入十六进制常数的部分原因,8#for Octal,2#for Binary等。

不过,在基础上需要“未来增长”的空间,我并不是太担心自己了。这不像RAM或解决您每一代都需要更数量级的空间。

实际上,研究表明,八进制和十六进制几乎是 甜蜜点 对于兼容二进制的人类可读表示。如果您的距离低于八进制,则它开始需要散布数量的数字来表示较大的数字。如果您比十六进制高,数学表将变得非常大。实际上,十六进制已经有点太多了,但是八进制的问题是它不均匀地适合字节。

有一个标准编码 base32. 。这与 基础64. 。但是阅读不是很方便。使用十六进制是因为2个十六进制数字可用于表示1 8位字节。八元主要用于使用的旧系统 12位 字节。与将RAW寄存器显示为二进制相比,它可以使数据更紧凑。

还应注意的是,某些语言使用O ###进行八分音和X ##或H ##进行HEX以及许多其他变体。

我认为它 0x 实际上是为Unix/Linux世界而来的,并被C/C ++和其他语言所吸引。但是我不知道确切的原因或真实原因。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top