在这段时间之后,我从未想过要问这个问题;我知道这是来自c++的,但它背后的原因是什么:
为什么是0?为什么是0x?基础32有自然的进展吗?
发布于 2012-12-19 20:28:41
C是C++和Java的祖先,最初是丹尼斯·里奇在70年代初在PDP-8s上开发的。这些机器有一个12位地址空间,所以指针(地址)是12位长,最方便地用4位8位数字来表示(第一个可寻址的字是00000八进制,最后一个可寻址的词是7777八进制)。
八进制并不能很好地映射到8位字节,因为每一个八进制数字代表三位,所以总有多余的位可以用八进制表示法表示。全真位字节(111111)在八进制为377,而FF为十六进制.
对于大多数人来说,十六进制在头脑中更容易转换成二进制数,因为二进制数字通常以8块表示(因为这是一个字节的大小),而8恰恰是两个十六进制数字,但在Dennis的时间里,十六进制表示法可能很笨重且具有误导性(这意味着处理16位的能力)。程序员在使用硬件(每一位通常代表一条物理线)和使用逐位逻辑(每一位具有程序员定义的意义)时,需要考虑二进制。
我认为Dennis添加了0前缀,作为每天小数最简单的变体,也是那些早期解析器最容易区分的。
我相信十六进制表示法0x__是后来添加到C中的。编译器解析树来区分1-9 (十进制常量的第一个数字)、0(八进制常数的第一个不重要数字)和0x (在后续数字中表示一个十六进制常量),它们之间的区别要比仅仅使用前导0作为指示符从解析后续数字转换为八进制而不是十进制要复杂得多。
丹尼斯为什么要这样设计?当代程序员不明白那些早期的计算机通常是通过物理翻转CPU前面板上的开关,或使用穿孔卡或纸带来控制那些早期计算机的;所有节省几步或指令的环境都节省了大量的体力劳动。此外,内存是有限和昂贵的,所以节省一些指令也有很高的价值。
总之:0的八进制,因为它是有效的可解析和八进制是用户友好的PDP-8s (至少在地址操纵)
0x的十六进制可能是因为它是一个自然的,向后兼容的扩展八进制前缀标准,仍然相对高效的解析。
发布于 2009-12-02 20:40:44
八进制的零前缀和十六进制的0x是Unix早期的前缀。
八进制存在的原因可以追溯到有6位字节的硬件时,这使得八进制成为了自然的选择。每个八进制数字代表3位,所以一个6位字节是两个八进制数字.这同样适用于十六进制,从8位字节,其中一个十六进制数字是4位,因此一个字节是两个十六进制数字。对8位字节使用八进制需要3位八进制数字,其中第一位只能有0、1、2和3(第一个数字实际上是‘四位’,而不是八进制)。除非有人开发了一个字节长度为10位的系统,否则没有理由使用base32,所以一个10位字节可以表示为两个5位的"nybbles“。
发布于 2009-12-02 20:30:45
我不知道。
0是0卡塔尔
我们已经用过0来表示八进制,在十六进制中也有x,所以在这里也是如此
至于自然进展,最好使用最新的编程语言,这些语言可以附加下标,例如
123_27 (意为下标)
诸若此类
标记
https://stackoverflow.com/questions/1835465
复制相似问题