3 回答
TA贡献1911条经验 获得超7个赞
这就是ASCII的设置方式。
来自a-z
第6位的信件设置为1
; 而来自A-Z
第6位的字母设置为0
。
32 = 100000 // the 6-th bit is set to 1
使用int
将执行XOR 反转第6位。
您可以做一些调试并看到自己:
for (char c : s.toCharArray()) { System.out.println(Integer.toBinaryString((int) c)); c ^= 32; // this line System.out.println(Integer.toBinaryString((int) c));}
TA贡献1796条经验 获得超10个赞
让我们看看这张表,你会明白为什么
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
与上部和下部版本的唯一区别是第5位(从0开始计数)。这就是为什么使用简单的XOR面罩,您可以来回更换外壳。
TA贡献1719条经验 获得超6个赞
对于ASCII编码,32是小写字母和大写字母之间的差异。它是2的幂,它的二进制表示是一个1位: 0010 0000
。
通过应用XOR赋值运算符,可以在字符值中更改此位。有效地添加(如果该位为0 in c
)或减去(bit为1 in c
)32。
这对于字母AZ和az都可以正常工作,但很可能对输入中的大多数其他字符都是无意义的。
添加回答
举报