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)
逆操作OR是AND与补码.
char c = 'a';
c &= ~' ';
Run Code Online (Sandbox Code Playgroud)
说明:
01100001 (char 'a')
AND 11011111 (~ char ' ')
= 01000001 (char 'A')
Run Code Online (Sandbox Code Playgroud)