c语言 用位预算符将大写字母转换成小写字母

来源:百度知道 编辑:UC知道 时间:2024/05/17 01:17:14
已知char c 存放一大写字母,用位运算符将其转换成小写字母,写出实现的表达式,并解释原因。

大写字母与小写字母差别在2进制数值的第6位. 第6位1是小写,第六位0 是大写.

大写字母到小写字母运算:
unsigned char a=0x41,b;
b = a + 0x20; // 加 0x20, 就是 加 0010 0000

例如字母A, ASCII 值 0x41, 就是 0100 0001
加 0x20, 就成 0110 0001, 就是 0x61, 小写 a.

若用位运算符:
b = a | 0x20;
按位加, 同上面算术加结果一样.

A到Z,ASCII 值 0x41 到 0x5A (0101 0000).
a到z, ASCII 值 0x61 - 0x7A. (第6位添1)

大写字母和对应小写字母ASCII码的关系:只有从高数第三位,即b5不同,大写字母的小,为0,小写字母的大,为1。所以只要把大写字母位或上二进制数00100000就可以了!
表达式:c=c|0x20;

首先说一个事实就是ascii字符a-z或者A-Z所对应的整数值都是连续的。比如说'a'如果对应123,那么'b'将对应124,以此类推。
因此不需要知道ascii字符对应的整数值也能够实现转换。

实现可以如下:

char bigAscii =...//来自于scanf或者其他什么地方
char smallAscii = bigAscii - 'A' + 'a';//bigAscii - 'A'求出了bigAscii相对于'A'的偏移量。然后加上'a'就可以得到对应的小写字母了。