C++ 大小写转换 与 位运算的 ^= 操作

C/C++ 中可以使用 isalpha (是否为字母),isdigit(是否为数字),islower(是否小写),isupper(是否大写),isalnum(是否为英文或数字) ,同时对于字母也可以使用 tolower 、toupper 进行大小写转换

/*大小写转换*/
int main(){   
    char c = 'a';  
    if(isalpha(a)){
        c = islower(c) ? toupper(c) : tolower(c);
    }
 }   

最近看到一个很有趣的转换方式
这里写图片描述

我们可以通过 ASCII 码表看出,大小写字母数值上相差了 32 ,一般我们可以直接进行加减 32 进行转换,但是有个更有趣的方法(可以说是取巧了) 就是大小写字母的二进制数值上,只有右数第五位相反
这里写图片描述

因此不管是大写字母还是小写字母,只要在右数第五位取反就可以得到其转换结果

char c = 'a';
c ^= (1 << 5);
// c = 'A'
/*or*/
char c = 'A';
c ^= (1 << 5);
// c = 'a'

猜你喜欢

转载自blog.csdn.net/MachineRandy/article/details/80269881