如何使用位操作转换案例?

时间:2015-07-08 07:11:46

标签: java c++ c algorithm data-structures

如何仅使用位操作将大写转换为小写,反之亦然?

2 个答案:

答案 0 :(得分:2)

在ASCII中,大写字符以010为前缀,然后是二进制的1-26 [它们在字母表中的位置]。小写以011为前缀。

通过使用按位OR操作数和00100000掩码0b00100000,32整数,可以将大写转换为小写,而不是更改小写。

例如

char character = 0b00100000 | 'A';

char character = 32 | 'A';

要转换为大写,请使用

char character = 0b01011111 & 'a';

char character = 95 & 'a';

您可以使用任何方式表示127或95作为位掩码来执行AND操作。

答案 1 :(得分:0)

如果查看ASCII table,可以看到字符'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;
}