Ascii趣事
来源:互联网 发布:racemenu男性捏脸数据 编辑:程序博客网 时间:2024/04/29 19:06
最近在慢慢的看一些guava的源代码,发现一段跟ascii相关的代码,结合一段历史来看很有意思。
guava代码中有Ascii这个类,定义了Ascii中部分字符的常量,目的嘛。。都是byte的常量,难道是省空间,Orz。直接说重点,里面定义touppercase和tolowercase方法,指明只对ascii码中的大小写进行转换,其实也就是对英文字母的转换,这与String里的方法是有区别的,因为String里面的case转换是基于unicode字符集的,显然大部分情况下,我们只需要对英文字母做大小写的转换,于是String toxxcase里面的一大坨代码需要考虑的locale,对不同字符的大小写转换码表,大量的位运算,还有很多判断逻辑都是浮云,代码很多余。Ascii里的代码很简单,只是使用位运算来处理英文字母的大小写转换,因为大小写相差刚刚32,unicode码里面有各种字符之间转换的码表,而ascii转换码表很简单,+-32即可,所以使用0x5f和0x20来做位运算就可以进行转换了,一个小的改进带来的价值有多大。。如果你有几百台机器在做大小写不敏感的字符串匹配和分析,这个改进的价值几何呢?我不清楚,也许google能给个答案。
32,这个数字很凑巧,刚好可以使用位运算来对大小写进行转换,其实是在1963年一次投票后Ascii码中大小写才改进为相差32:
The X3.2.4 task group voted its approval for the change to ASCII at its May 1963 meeting.Locating the lowercase letters in columns 6 and 7 caused the characters to differ in bit pattern from the upper case by a single bit, which simplified case-insensitive character matching and the construction of keyboards and printers.
很多时候我们需要了解更多的计算机发展历史才能明白更多东西,只是我们有多少时间专门来做这件事呢,还得平时多留心啊!
- Ascii趣事
- 趣事:
- 趣事,嗯,就是趣事
- 一件趣事
- 春联趣事
- 招聘趣事
- 趣事一则
- 体检趣事
- 麻将趣事
- matlab趣事
- 面试趣事
- 小时候趣事
- 小趣事
- 豆豆趣事
- 工作趣事
- 飞机趣事
- 女儿趣事
- 302趣事
- FTP不能连接的原因
- 基于.NET平台的分层架构实战(七)——数据访问层的第一种实现:Access+SQL
- 一个值得纪念的日子
- 转载
- 写给2011年的春天
- Ascii趣事
- java的参数传递原理
- “you are using old package ‘base' version 3.x"
- 嵌入式linux学习之路
- Makefile的工作原理与详解
- java socket的用法
- 基于.NET平台的分层架构实战(七-外一篇)——对数据访问层第一种实现(Access+SQL)的重构
- 3094
- 基于.NET平台的分层架构实战(八)——数据访问层的第二种实现:SQLServer+存储过程