毕竟这一次,我从来没有想过要问这个问题,我明白这是来自c,但是它背后的原因是什么:
>指定十进制数
通常会
>通过前导0指定八进制数
>通过前导0x指定十六进制数字
为什么0为什么是0x? 32号基地有自然进展吗?
解决方法
C,C和
Java的祖先,最初由Dennis Richie在七十年代初PDP-8开发.那些机器有一个
12-bit address space,所以指针(地址)是12位长,最方便地用代码表示三个4位八进制数字(第一个可寻址字将是000个字,最后一个可寻址字777cctal).
八进制不能很好地映射到8位字节,因为每个八进制数字表示三位,所以在八进制符号中总是存在多余的位.全为TRUE位字节(1111 1111)为八进制377,但十六进制FF.
十六进制对于大多数人来说比较容易,因为二进制数通常用八进制表示(因为这是一个字节的大小),而八位正好是两个十六进制数字,但是十六进制符号将被笨拙并在丹尼斯的时间误导(意味着能够解决16位).当使用硬件(每个位通常代表物理线)和处理逐位逻辑(每个位具有程序员定义的含义)时,程序员需要考虑二进制.
我想像丹尼斯添加了0前缀作为日常十进制数的最简单的可能变化,最简单的那些早期的解析器来区分.
我相信十六进制符号0x__稍后稍后添加到C中.编译器解析树来区分1-9(十进制常数的第一位数),0(八进制常数的第一个[无效数字))和0x(表示后续数字中遵循的十六进制常量)相当多比仅使用前导0作为指示符从分析后续数字转换为八进制而不是十进制而复杂.
为什么丹尼斯这样设计? Contemporary programmers不明白,这些早期的计算机通常通过在cpu前面板上或通过打孔卡或纸带物理翻转开关来切换指令来控制cpu;节省了几个步骤或指令的所有环境代表了大量体力劳动的节省.而且,内存有限而且昂贵,所以节省甚至几个指令都具有很高的价值.
综上所述:
0为八进制,因为它是有效的可解析和八进制在PDP-8上是用户友好的(至少对于地址操纵)
0x的十六进制可能是因为它是八进制前缀标准的自然和向后兼容扩展,仍然相对有效率的解析.