大写字母ASCII码的二进制和16进制表示:
A -> 0100-0001 -> 41 Z -> 0101-1010 -> 5A
小写字母ASCII码的二进制和16进制表示:
a -> 0110-0001 -> 61 z -> 0111-1010 -> 7A
观察可以发现大写字母和小写字母二进制ASCII码的差别在从左数第三位,大写字母该位为0小写字母该位为1。可以利用这点完成字母的大小写的判定和转换,具体来说:
大小写判定:
//char ch; bool is_lowercase = ch & 0x20;
检验代码:
#includeusing namespace std; int main() { char ch1 = 'a', ch2 = 'A'; bool is_lowercase = ch1 & 0x20; is_lowercase ? printf("%c is lowercase.n", ch1) : 0; is_lowercase = ch2 & 0x20; is_lowercase ? 0 : printf("%c is not lowercase.", ch2); }
运行结果:
大小写转换:
//大写转小写,使用"或"运算符 ch |= 0b0010-0000; ch |= 0x20; //小写转大写,使用"与"运算符 ch &= 0b1101-1111; ch &= 0xDF; //大小写转换通用 *** 作,使用"异或"运算符 ch ^= 0b0010-0000; ch ^= 0x20;
关于异或运算的性质:
-
与0异或原位不变
-
与1异或原位变反(0变1,1变0)
检验代码:
#includeusing namespace std; int main(){ char pos[26]; for (int i = 0; i != 26; ++i) { pos[i] = 'a' + i; cout << pos[i] << " "; } cout << endl; for (auto ch : pos) { cout << (ch ^= 0x20) << " "; } }
}
运行结果:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)