看到了一個經過宏來判斷字符是不是字母的方法,記錄一下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