ASCII码的排序背后有什么逻辑吗?

时间:2009-07-16 08:23:05

标签: char ascii

我正在教我的弟弟学习工程学。我向他解释了不同的数据类型实际存储在内存中的方式。我向他解释了签名/无符号数字背后的物流和十进制数字的浮点位。当我告诉他C中的char类型时,我还带他通过ASCII代码系统,以及char也被存储为1字节数。

他问我为什么'A'被给予ascii代码65而不是其他什么?同样,为什么'a'具体代码为97?为什么在大写字母和小写字母之间存在6个ascii代码的差距?我不知道这个。你能帮助我理解这一点吗,因为这也给我带来了很大的好奇心。到目前为止,我从未找到任何讨论过该主题的书。

这背后的原因是什么? ASCII码是否按逻辑组织?

7 个答案:

答案 0 :(得分:71)

有历史原因,主要是为了使ASCII码易于转换:

数字(0x30至0x39)具有二进制前缀110000:

0 is 110000
1 is 110001
2 is 110010

等。 因此,如果你清除前缀(前两个'1'),你最终会得到二进制编码的十进制数字。

大写字母的二进制前缀为1000000:

A is 1000001
B is 1000010
C is 1000011

等。 同样的,如果你删除前缀(第一个'1'),你最终会得到字母索引字符(A是1,Z是26等)。

小写字母的二进制前缀为1100000:

a is 1100001
b is 1100010
c is 1100011

等。 与上述相同。因此,如果您将32(100000)添加到大写字母,则您具有小写版本。

答案 1 :(得分:10)

这张图表从维基百科中可以很好地显示出来:注意下方2的上部2的两列控制2,然后用misc填充间隙。 ASCII Chart on Wikipedia

还要记住,ASCII是基于之前的过程开发的。有关ASCII历史的更多详细信息,请参阅this superb article by Tom Jennings,其中还包括一些陌生控制字符的含义和用法。

答案 2 :(得分:6)

以下是ASCII代码的详细历史和说明:http://en.wikipedia.org/wiki/ASCII
简而言之:

  • ASCII基于电传打字机编码标准
  • 前30个字符是“不可打印的” - 用于文本格式化
  • 然后他们继续使用可打印的字符,大致是为了将它们放在键盘上。检查你的键盘:
    • space,
    • 数字上限的大写标志:!,“,#,...,
    • 数字
    • 标志通常放在键盘行的末尾,带有数字 - 大写
    • 大写字母,按字母顺序
    • 标志通常放在键盘行的末尾,带有字母 - 大写
    • 小写字母,按字母顺序
    • 标志通常放在键盘行的末尾,带有字母 - 小写

答案 3 :(得分:5)

Aa之间的距离是32.这是非常圆的数字,不是吗?

大写字母和小写字母之间的6个字符的间隙是因为(32 - 26)= 6.(注意:英文字母中有26个字母)。

答案 4 :(得分:0)

  • 'A'在十六进制中是0x41。
  • 'a'在十六进制中是0x61。
  • '0'到'9'在十六进制中是0x30 - 0x39。

因此,至少很容易记住Aa0-9的数字。我不知道这些符号。请参阅The Wikipedia article on ASCII Ordering

答案 5 :(得分:0)

如果你看一下'a'和'A'的二进制表示,你会发现它们只相差1位,这非常有用(将大写字母改为小写字母,反之亦然)翻转一下)。为什么要专门开始,我不知道。

答案 6 :(得分:0)

Wikipedia

  

代码本身的结构是这样的   大多数控制代码在一起,和   所有图形代码都在一起。该   前两列(32个职位)是   保留给控制角色。[14]   “空间”角色必须来   在图形之前进行排序   算法简单,所以它成了位置   为0x20。[15]委员会决定这样做   重要的是支持大写   64个字符的字母表,并选择   结构ASCII因此很容易   减少到可用的64个字符集   图形代码。[16]小写   因此,字母不是交错的   大写。保持选项开放   小写字母和其他字母   图形,特殊和数字   代码放在字母之前,   字母'A'被放入   位置0x41以匹配草稿   相应的英国人   标准[17]。数字0-9是   因此它们对应于中的值   二进制前缀为011,制作   使用二进制编码的十进制转换   简单。