^= 32 背后的想法是什么,它将小写字母转换为大写字母,反之亦然?

新手上路,请多包涵

我正在解决一些关于codeforces的问题。通常我首先检查字符是大写还是小写英文字母,然后减去或添加 32 将其转换为相应的字母。但我发现有人做 ^= 32 做同样的事情。这里是:

 char foo = 'a';
foo ^= 32;
char bar = 'A';
bar ^= 32;
cout << foo << ' ' << bar << '\n'; // foo is A, and bar is a

我已经为此搜索了一个解释,但没有找到。那么为什么这有效呢?

原文由 Devon 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 406
1 个回答

让我们看一下二进制的ASCII码表。

 A 1000001    a 1100001
B 1000010    b 1100010
C 1000011    c 1100011
...
Z 1011010    z 1111010

而32是 0100000 这是小写字母和大写字母的唯一区别。因此,切换该位会切换字母的大小写。

原文由 Hanjoung Lee 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题