大小写字母转换与ascii码

char ch = (char)('a' ^ 32) 字符和32做异或,即可以完成大小写字母的转换

ASCII码表

大小写字母的ASCII码分别如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
a = 01100001    A = 01000001 
b = 01100010 B = 01000010
c = 01100011 C = 01000011
d = 01100100 D = 01000100
e = 01100101 E = 01000101
f = 01100110 F = 01000110
g = 01100111 G = 01000111
h = 01101000 H = 01001000
i = 01101001 I = 01001001
j = 01101010 J = 01001010
k = 01101011 K = 01001011
l = 01101100 L = 01001100
m = 01101101 M = 01001101
n = 01101110 N = 01001110
o = 01101111 O = 01001111
p = 01110000 P = 01010000
q = 01110001 Q = 01010001
r = 01110010 R = 01010010
s = 01110011 S = 01010011
t = 01110100 T = 01010100
u = 01110101 U = 01010101
v = 01110110 V = 01010110
w = 01110111 W = 01010111
x = 01111000 X = 01011000
y = 01111001 Y = 01011001
z = 01111010 Z = 01011010

小写字母是从97(a)开始的,大写字母是从65(a)开始

二进制表示上,只有第6位(从低到高)不同,以字母a和A为例:

a=0110 0001,A=0100 0001

而二进制0010 0000的十进制表示为32

可以利用异或运算的特性,实现大小写字母的互相转换

总结

  • (char)('a' ^ 32) 和32做异或可以实现大小写字母转换
  • 若全部转化为小写字母,只需ASCII码第六位置1即可,'A' | (1 << 5)
  • 同理,全转大写,第六位置0,'a' & ~(1 << 5)