博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

位运算应用之二——大小写转换

Posted on 2014-05-17 22:20  xymaqingxiang  阅读(1109)  评论(0编辑  收藏  举报

问题描述:

  试编写一个程序,将输入的大写字母转换为小写字母,输入的小写字母转换为大写字母,要求用位运算完成转换过程

算法分析:

  我们都知道大写字母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 }