如何仅使用位操作将大写转换为小写,反之亦然?
在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。因此,要从一个数字转换为另一个数字,只需加上或减去该数字。
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;
}