问题描述:
试编写一个程序,将输入的大写字母转换为小写字母,输入的小写字母转换为大写字母,要求用位运算完成转换过程
算法分析:
我们都知道大写字母A~Z的编码是65~90,小写字母的编码a~z是97~112;而大写A(65)的二进制编码为100
0001,小写字母a(97)的二进制编码为110 0001,很明显除了第5位之外其它位都是一样的,也就是说大小写是由第5位来区分的,第5位为1即为小写,第5位为0即为大写。
算法描述:
1 /*
2 *问题描述:试编写一个程序,将输入的大写字母转换为小写字母,输入的小写字母转换为大写字母,要求用位运算完成转换过程.
3 *算法分析:我们都知道大写字母A~Z的编码是65~90,小写字母的编码a~z是97~112;而大写A(65)的二进制编码为100 0001,小写字母a(97)的二进制编码为110 0001,很明显除了第5位之外其它位都是一样的,也就是说大小写是由第5位来区分的,第5位为1即为小写,第5位为0即为大写。
4 *BY : xymaqingxiang
5 *Time :2014-05-17
6 */
7
8 #include <stdio.h>
9 #include <stdlib.h>
10 void main()
11 {
12 char ch;
13
14 printf("请输入一个字母:\n");
15 ch = getchar();
16 flushall();
17
18 while(!(ch>‘A‘ && ch<‘z‘) || (ch>‘Z‘ && ch<‘a‘))
19 {
20 printf("输入有误,请重新输入一个字母:\n");
21 ch = getchar();
22 flushall();
23 }
24 if(ch & 32) //32 : 10 0000——判断第5位是否为1
25 {
26 ch = ch & 223;//223 : 1101 1111————使第5位置0,变为大写
27 }
28 else
29 {
30 ch = ch | 225;//255 : 1111 1111————使第5位置1,变为小写
31 }
32 putchar(ch);
33
34 putchar(‘\n‘);
35 system("pause");
36 }
时间: 2024-11-01 17:24:29