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

问题描述:

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

算法分析:

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

位运算应用之二——大小写转换的相关文章

Java千问:Java位运算经典应用(二)

接上篇 三.不借助中间变量交换两个变量的值 通常情况下,我们要交换两个变量的值都按如下步骤操作: 这种操作方式不难理解,实现交换变量值的关键点就在于中间变量c.而现在的题目要求是不借助中间变量来交换a和b的值.如果不使用位运算的方式,同样可以做到不借助中间变量交换两个变量的值,其实现过程如下. 为了讲解方便,我们把最初a与b的值称之为原始a和原始b,3行代码就是3步操作:第1步:把原始a与原始b相加的和存储到变量a中,变量b的值暂时没有发生变化.第2步:用这个和减去原始b,再赋值到变量b中,经过

位运算(&amp;、|、^)与逻辑运算(&amp;&amp;、 ||)区别

刚无意在一篇文章中看到了位运算(&.|)和逻辑运算(&&.||)的介绍,想起了自己薄弱的基础知识,于是百度了几把总结了下. 首先从概念上区分下,位运算是将运算符两边的数字换算成二进制(例:0000010001)后比较相同位置上的0.1进行运算的.逻辑运算即比较运算符两边的逻辑值(true或false).概念比较抽象,下边借助实际例子比较下. 位运算 先将每个数转换成二进制,然后进行,位或(|)表示相对应的每位至少有一个为1,则结果为1,只有两个都为0,结果才为0.位与(&)

位运算和典型应用详解

位运算的符号 与运算:& 或运算:| 异或运算:^ 非运算:~ 移位运算:>>和<< 一. 逻辑运算符1. & 位与运算 1) 运算规则 位与运算的实质是将参与运算的两个数据,按对应的二进制数逐位进行逻辑与运算.例如:int型常量4和7进行位与运算的运算过程如下:4=0000 0000 0000 0100 &7 =0000 0000 0000 0111= 0000 0000 0000 0100对于负数,按其补码进行运算.例如:例如:int型常量-4和7进行位

【转】位运算

[转]http://blog.chinaunix.net/uid-21411227-id-1826986.html 一.逻辑运算符  1.& 位与运算   1) 运算规则  位与运算的实质是将参与运算的两个数据,按对应的二进制数逐位进行逻辑与运算.例如:int型常量4和7进行位与运算的运算过程如下: 4=0000 0000 0000 0100 &7 =0000 0000 0000 0111= 0000 0000 0000 0100 对于负数,按其补码进行运算.例如:例如:int型常量-4和

Python 进制转换、位运算

一.进制转换 编程用十进制,十进制转换为二进制.八进制.十六进制 In [135]: bin(23) Out[135]: '0b10111' In [136]: oct(23) Out[136]: '0o27' In [137]: hex(23) Out[137]: '0x17' 也可以直接反向获取十进制 In [146]: 0b10111 Out[146]: 23 In [147]: 0o27 Out[147]: 23 In [148]: 0x17 Out[148]: 23 也可以用int函数

nyist oj 138 找球号(二)(hash 表+位运算)

找球号(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描述 在某一国度里流行着一种游戏.游戏规则为:现有一堆球中,每个球上都有一个整数编号i(0<=i<=100000000),编号可重复,还有一个空箱子,现在有两种动作:一种是"ADD",表示向空箱子里放m(0<m<=100)个球,另一种是"QUERY",表示说出M(0<M<=100)个随机整数ki(0<=ki<=100000100),分

javascript中的类型转换(进制转换|位运算)

1:parseInt(string) : 这个函数的功能是从string的开头开始解析,返回一个整数 parseInt("123hua"); //输出 123 parseInt("123"); //输出 123 parseInt("12.3"); //输出 12 parseInt("hua"); //输出 Nan 2:另外parseInt()方法还有其他模式,就是可以把二进制.八进制.十六进制或其他任何进制的字符串转换成整数

剑指offer—算法之位运算(二进制中1的个数)

位运算: 左移:m<<n将m左移n位,左移后低位补充0: 右移:m>>n将m右移n位,右移后高位补充的是符号位,负数补充1,整数补充0.(正数的边界值为(1,ox7FFFFFFF),负数的边界值为(ox80000000,oxFFFFFFFF)) 题目一:请实现一个函数,输入一个整数,输出这个数的二进制表示中1的个数. 思路一:将二进制数i与1相与,判断是否为1,然后将tag=1左移一位得到tag=2,然后再与i相与,循环结束的条件是tag==0:该算法的时间复杂度为输入的i的位数.

位运算简介及实用技巧(二):进阶篇(1)[转]

位运算简介及实用技巧(二):进阶篇(1) 原贴链接:http://www.matrix67.com/blog/archives/264 =====   真正强的东西来了!   ===== 二进制中的1有奇数个还是偶数个    我们可以用下面的代码来计算一个32位整数的二进制中1的个数的奇偶性,当输入数据的二进制表示里有偶数个数字1时程序输出0,有奇数个则输出1.例如,1314520的二进制101000000111011011000中有9个1,则x=1314520时程序输出1.var   i,x,