如何在不使用toupper函数的情况下将char转换为大写

J3s*_*oon 4 c++ bit-manipulation lowercase uppercase

最近我看到了一段将char转换为小写的代码,如果它已经是小写,它就会保持不变.

char c = 'A';
c |= ' ';
//c -> 'a'
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写一个代码,可以将char转换为大写而不使用toupper函数.

目前我能想到的最简单的方法是下面的代码.

char c = 'a';
c = (c | ' ') - ' ';
//c -> 'A'
Run Code Online (Sandbox Code Playgroud)

所以我想知道是否有比这更简单的代码,并且可以实现相同的结果.

任何帮助表示赞赏.

第一个代码块的快速解释

Char | ASCII Code
' '  | 13
'A'  | 65
'a'  | 97
Run Code Online (Sandbox Code Playgroud)

or操作符进行位操作

   01000001 (char 'A')
Or 00100000 (char ' ')
 = 01100001 (char 'a')
----------------------
   01100001 (char 'a')
Or 00100000 (char ' ')
 = 01100001 (char 'a')
Run Code Online (Sandbox Code Playgroud)

Bar*_*mar 9

逆操作ORAND与补码.

char c = 'a';
c &= ~' ';
Run Code Online (Sandbox Code Playgroud)

DEMO

说明:

    01100001 (char 'a')
AND 11011111 (~ char ' ')
  = 01000001 (char 'A')
Run Code Online (Sandbox Code Playgroud)