字符轉(zhuǎn)換函數(shù)的實(shí)現(xiàn)
第一種方法,利用 ASCII 碼大小計(jì)算
1 char mytoupper(char c)
2 {
3 if (c >= 'a' && c <= 'z')
4 {
5 c += ('A' - 'a');
6 }
7 return c;
8 }
9
10 char mytolower(char c)
11 {
12 if (c >= 'A' && c <= 'Z')
13 {
14 c += ('a' - 'A');
15 }
16 return c;
17 }
第二種方法,利用位運(yùn)算
'a' - 'z': 97 - 122
'A' - 'Z': 65 - 90
'a' 與 'A' 正好相差 32 ,即 20x ,0010 0000
大寫(xiě)字母的范圍是 0100 0001 - 0101 1010
小些字母的范圍是 0110 0001 - 0111 1010
對(duì)于大寫(xiě)字母第 5 位都為 0
對(duì)于小些字母第 5 為都為 1
可以利用位運(yùn)算的方法,即對(duì)大寫(xiě)字母的第 5 位進(jìn)行操作,但要保持其他位不變
即利用 MASK = 0010 0000
大寫(xiě) -> 小寫(xiě)
'a' = 'A' | (0010 0000);
小寫(xiě) -> 大寫(xiě)
'A' = 'a' & (1101 1111);
這樣做也不需要檢測(cè),如果本來(lái)就是小寫(xiě),在做 或 操作時(shí),第 5 位不變,維持 1
如果本來(lái)就是大寫(xiě),在做 與操作時(shí),第 5 位還是不變,維持 0
1 char mytoupper(char c)
2 {
3 return c & (0xDF);
4 }
5
6 char mytolower(char c)
7 {
8 return c | (0x20);
9 }
http://www.shnenglu.com/qinqing1984/archive/2011/06/25/149427.html
posted on 2011-06-25 18:24
unixfy 閱讀(106)
評(píng)論(0) 編輯 收藏 引用