我在教学中C到我的弟弟学习工程学。 我解释了他不同的数据类型实际上是如何存储在内存中。 我解释了他的身后物流十进制数已签署/无符号数和浮点位。 当我告诉他char类型在C,我也把他通过ASCII代码系统和焦炭也怎么也存储为1个字节数。
他问我为什么“A”已经给出了ASCII码65,而不是别的什么吗? 同样为什么“a”是给代码97特别? 为什么有6个ASCII码大写字母和小写字母的范围之间的差距? 我没有这方面的想法。 你能帮助我理解这一点,因为这产生了很大的好奇我也。 我从来没有发现任何一本书至今已经讨论过这个话题。
这背后有什么原因? 是ASCII码逻辑组织?
有历史的原因,主要是为了使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)以一个大写字母,你有小写版本。
该图表显示它很好从维基百科:注意的下部上2控制2的两列,然后用间隙杂项填充。
的同时也要记住的是ASCII是基于什么之前已经通过开发。 有关ASCII历史的更多细节,请参见由汤姆·詹宁斯这一高超的文章 ,其中还包括一些陌生人控制字符的含义和用法。
这里是非常详细的病史和ASCII码描述: http://en.wikipedia.org/wiki/ASCII
简而言之:
- ASCII是基于电传编码标准
- 前30个字符是“非打印” - 用于文本格式
- 然后他们继续打印字符,大致以它们被放置在键盘上。 检查你的键盘:
- 空间,
- 在数字大写标志帽!”,#,...,
- 数字
- 症状通常放置在键盘一行数结束 - 大写
- 大写字母,字母
- 症状通常放置在与字母键盘的行结束 - 大写
- 小写字母,字母
- 症状通常放置在与字母键盘的行结束 - 小写
之间的距离A
和a
为32。这是相当回合数,不是吗?
的大写字母和小写字母之间6个字符的间隙是因为(32 - 26)= 6。(注:有英语字母表中26个字母)。
如果你看的“a”和“A”的二进制表示,你会看到,他们只有1位,这是(转大写小写或反之亦然非常有用的不同仅仅是一个翻转的事位)。 为什么专门从那里开始,我不知道。
- “A”是在十六进制的0x41。
- “a”是在十六进制0x61。
- '0' 通 '9' 是的0x30 - 以十六进制0x39。
所以,至少它很容易记住的数字A
, a
和0-9
。 我不知道这些符号的想法。 请参见上ASCII订购维基百科的文章 。
维基百科 :
代码本身构造,使得大多数控制码在一起,和所有图形码在一起。 前两列(32个位置)被保留用于控制字符。[14] “空格”字符有前来图形前进行排序算法容易,所以它成为位置为0x20。[15] 该委员会决定支持上壳体64个字符的字母,并选择到结构ASCII,以便它可以容易地降低到一个可用的64的字符集的图形码是重要的。[16] 小写字母,故未以大写字母交错。 为了保持选项开放的小写字母和其他图形,特殊和数字代码放置在字母前,和字母“A”被放置在位置的0x41到相应的英国标准草案相匹配。[17] 数字0-9置于所以它们对应于与前缀011中的二进制值,使得转化率随二进制编码的十进制简单。