问题描述:
试编写一个程序,将输入的大写字母转换为小写字母,输入的小写字母转换为大写字母,要求用位运算完成转换过程
算法分析:
我们都知道大写字母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 }