如何通过位操作转换大小写? [已关闭]

问题描述 投票:0回答:2

如何仅使用位操作来转换大小写?

java c++ c algorithm data-structures
2个回答
3
投票

在 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 运算。


0
投票

如果您查看 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;
}
© www.soinside.com 2019 - 2024. All rights reserved.