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

标签 c++ bit-manipulation ascii

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

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

我已经搜索过对此的解释,但没有找到。那么为什么这有效呢?

最佳答案

我们来看看二进制的ASCII码表。

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

而 32 是 0100000,这是小写字母和大写字母的唯一区别。所以切换那个位会切换字母的大小写。

关于c++ - ^= 32 背后的想法是什么,它将小写字母转换为大写字母,反之亦然?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54536362/

相关文章:

rust - 将 ASCII 数字标准化为数字

c++ - QProgressDialog 在 initializeGL 期间不绘制

c++ - 如何将 Tesseract OCR 库集成到 C++ 程序中

c++ - Arduino 中带有构造函数的对象组合

javascript - 按位逻辑运算符~

python-3.x - 如何翻转二进制表示中的位模式?

Java 小数位逻辑移位错误

python - 发送邮件时Ascii编码错误

javascript - NodeJS 缓冲区 - ASCII 二进制表示

c++ - 是否有针对 C++ 优化编译器的良好测试?