每日一技能:翻转26个二进制字母的大小写

 2024-02-20 04:01:50  阅读 0

ascii码进制转换_ascii码用几进制表示_a的ascii码用二进制表示

摄影:产品经理

与产品经理一起环游世界

例如,现在有一个仅由大小写英文字母组成的字符串。 现在我们要在大写和小写字母之间翻转并将其更改为。

也许您会使用以下解决方案:

dst = ''
src = 'xyzABCXYZabc'
for letter in src:
if letter.isupper():
dst += letter.lower()
else:
dst += letter.upper()

运行效果如下图所示:

ascii码进制转换_ascii码用几进制表示_a的ascii码用二进制表示

那么有没有办法在不使用if条件的情况下翻转字母的大小写呢? 这时候我们就需要考虑字母的Ascii码了。

大写字母AZ对应的Ascii码为65~90,小写字母az对应的Ascii码为97~122。

我们看一下这些Ascii码对应的二进制值:

字母 Ascii 码二进制

65

97

66

98

...

...

...

90

122

如果你仔细观察,你会发现:与右边的第6位不同。 与右数第6个不同。 ...与只有右起第 6 位数字不同。

所以,如果你想把大写的A变成小写的a,只需要将右边第6位数字从0改为1即可。要将小写b变成大写B,只需要把右边第6位数字改为0。

总结一下,右起第6位如果从1变成0,就是小写,如果从0变成1,就是大写。 其他数字根本不需要改变。

如果不使用if判断,如何将1变成0,0变成1呢? 此时我们可以使用二进制异或运算:

1 xor 1 = 0
1 xor 0 = 1
0 xor 0 = 0
0 xor 1 = 1

异或运算,两边相同则返回0,两边不同则返回1。

因此,我们只需要将字母对应的Ascii码进行异或即可。

那么最终的代码就变成了:

dst = ''
src = 'xyzABCXYZabc'
for letter in src:
dst += chr(ord(letter) ^ 0b100000)
print(dst)

运行效果如下图所示:

ascii码进制转换_ascii码用几进制表示_a的ascii码用二进制表示

上面的代码中,ord函数返回字符的Ascii码,chr函数将Ascii码转换为字符。

标签: 字母 字符 翻转

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码