如何仅使用位操作来转换大小写?
在 ASCII 中,大写字符以 010 为前缀,然后是二进制的 1-26 [它们在字母表中的位置]。小写字母以 011 为前缀。
通过使用按位或操作数和 00100000 掩码 0b00100000, 32 整数,您可以将大写转换为小写,而不改变小写。
示例
char character = 0b00100000 | 'A';
或
char character = 32 | 'A';
要转换为大写,请使用
char character = 0b01011111 & 'a';
或
char character = 95 & 'a';
您可以使用任何表示 127 或 95 的方式作为位掩码来进行 AND 运算。
如果您查看 ASCII 表,您可以看到字符
'a'
的值为 97(十进制),而字符 'A'
为 65。相差 32。因此,要从 1 转换为其他,添加或减去该数字。
C 中的示例:
int main(int argc, char *argv[]){
char a = 'a'; //a is now lowercase
printf("\n%c", a);
a = a - 32;
printf("\n%c", a); //a is now uppercase
a = 'B';
printf("\n%c", a); //a is now uppercase
a = a + 32;
printf("\n%c", a); //a is now lowercase
return 0;
}