經過宏判斷字符是不是字母

看到了一個經過宏來判斷字符是不是字母的方法,記錄一下spa

#define LOWER(c) ((unsigned) c | 0x20)
#define ISALPHA(c) (LOWER(c) >= 'a' && LOWER(c) <= 'z')

註釋:code

0x20 = 0010 0000 (十進制的32)blog

'A' = 0100 0001 (十進制的65);  'Z' = 0101 1010 (十進制的90)class

'a' = 0110 0001  (十進制的97);  'z' = 0111 1010 (十進制的122)方法

故'A' ~ 'Z' 的第六位都是0(上述紅色),那麼 ('A' ~ 'Z') |= 0x20 至關於加了32,就成爲了其小寫;註釋

'a' ~ 'z' 的第六位都是0(上述藍色),那麼 ('a' ~ 'z') |= 0x20 至關於不變。di

因此,若是c是字母,那麼LOWER(c) 宏將c變爲其小寫(若是c自己就是大寫,則不變),若是c不是字母那麼LOWER(c)的結果不多是['a', 'z']之間的;co

相關文章
相關標籤/搜索