最近我看到一段代码将字符转换为小写,如果它已经是小写,它保持不变。

char c = 'A';
c |= ' ';
//c -> 'a'

我正在尝试编写一个可以在不使用 toupper 函数的情况下将字符转换为大写的代码。

目前我能想到的最简单的方法是下面的代码。
char c = 'a';
c = (c | ' ') - ' ';
//c -> 'A'

所以我想知道是否有比这更直接的代码,并且可以达到相同的结果。

任何帮助表示赞赏。

第一个代码块的快速解释
Char | ASCII Code
' '  | 13
'A'  | 65
'a'  | 97

以及用于位操作的 or 运算符
   01000001 (char 'A')
Or 00100000 (char ' ')
 = 01100001 (char 'a')
----------------------
   01100001 (char 'a')
Or 00100000 (char ' ')
 = 01100001 (char 'a')

最佳答案

OR 的逆运算是 AND 与补码。

char c = 'a';
c &= ~' ';

DEMO

解释:
    01100001 (char 'a')
AND 11011111 (~ char ' ')
  = 01000001 (char 'A')

关于c++ - 如何在不使用 toupper 函数的情况下将字符转换为大写,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34529922/

10-09 06:37