目录,C语言程序设计案例教程,单击此处编辑母版标题样式,单击此处编辑母版文本样滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答答,单击此处编辑母版标题样式,单击此处编辑母版文本样滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答答,单击此处编辑母版标题样式,单击此处编辑母版文本样滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答答,单击此处编辑母版标题样式,单击此处编辑母版文本样滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答答,单击此处编辑母版标题样式,单击此处编辑母版文本样滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答滴答答,位运算,位运算,案例,引入,将一个十进制数转化为二进制数,C,语言标准输出函数只能将一个整数以,10,、,8,和,16,进制输出(使用,%d,、,%o,、,%x,),但是,C,语言没有二进制输出格式。之前我们也设计过一定的程序完成十进制与二进制、十六进制的转换,如何使用位操作实现将一个十进制转换为二进制数。,任务描述,案例将一个十进制数转化为二进制数C语言标准输出函数只能将,#include,main(),int i,bit;/*,定义循环变量,i,和位,1/0,标志变量,bit*/,unsigned int n,mask;/*,定义欲转换的整数,n,和屏蔽字变量,mask*/,mask=0 x8000;/*,初始屏蔽字,1000,,,0000,,,0000,,,0000,,从左边最高位开始检查*,/,printf(Enter a integer:);,scanf(%d,/*,输入要转换的整数*,/,printf(binary of%u is:,n);,for(i=0;i1;/*,右移,1,位得到下一个屏蔽字*,/,printf(n);,案例,引入,将一个十进制数转化为二进制数,源代码展示,#include案例将一个十进制数转化为二,将一个十进制数转化为二进制数,案例,引入,运行结果,设置一个屏蔽字,其中只有一个位为,1,,其余为,0,,为,1,的位为测试位置。将此屏蔽字与被转换数进行“位与”运算,根据运算结果判断被测试的位是,1,还是,0,。循环测试(一个整数,2,字节,,16,位,测试,16,次,从最高位开始测试,每次测试后屏蔽字右移,1,位以便测试下一个位)并输出的测试结果就是整数对应的二进制数。,程序分析,将一个十进制数转化为二进制数案例运行结果设置一个屏蔽字,,能力目标,1,能够熟练位运算符的操作。,2,培养数据检测与控制领域中的编程能力。,能力目标1能够熟练位运算符的操作。,位运算符,1,位运算符的运算功能,2,知识要求,位运算符1位运算符的运算功能2知识要求,位 运,算,C,语言是为描述系统而设计的,因此它具有汇编语言所能完成的一些功能。,C,语言既具有高级语言的特点,又具有低级语言的功能,因而具有广泛的用途和很强的生命力。第,7,章介绍的指针运算和本章将介绍的位运算就很适合于编写系统软件的需要,是,C,语言的重要特色。在计算机用于检测和控制领域中要用到位运算的知识,因此读者应该学习和掌握本章的内容。,位 运 算C语言是为描述系统而设计的,因此它具有汇编语言,10.1,位运算符,所谓位运算是指进行二进制位的运算。,C,语言中,位运算的对象只能是整型或字符型数据,不能是其他类型的数据。,10.1位运算符所谓位运算是指进行二进制位的运算。C语,10.1,位运算符,C,语言提供了六种运算符。只有求“反”运算符(,)为单目运算符,其余均为双目运算符。各双目运算符与赋值运算符结合可以扩展的赋值运算符。,10.1位运算符 C语言提供了六种运算符。只,10.2,位运算符的运算与应用,1.按位取反运算符,按位取反“,”,是单目运算符,对一个二进制数的每一位都取反。,例如:,a=00011010(1A),a=11100101(E5),。,10.2位运算符的运算与应用1.按位取反运算符按位取反,10.2,位运算符的运算与应用,左移运算符“,”功能:将一个数的各个二进制位全部向左平移若干位(左边移出的部分忽略,右边补,0,)。,若,a=15,,即二进制数,00001111,,执行语句,a=a2,,左移,2,位得,00111100,,即十进制,60,。,左移,1,位相当于该数乘以,2,,左移,2,位相当于该数乘以,4.,但此结论只适用于该数左移时被溢出舍弃的高位中部包含,1,的情况。,例如:,unsigned char a=26;/*(26),10,=(0001,1010),2,=(1A),16,*/,a=a2;/*(0110,1000),2,=(68),16,=(104),10,*/,左移比乘法运算快得多,有些编译程序自动将乘以,2,的运算用左移一位来实现,将乘,2,n,的幂运算处理为左移,n,位。,2.左移运算符,10.2位运算符的运算与应用左移运算符“”,功能:将一个数的各个二进制位全部向右平移若干位(右边移出的部分忽略,右边对无符号数补,0,,有符号数补符号位)。,每右移,1,位,相当于除,2,,左移,n,位相当于除,2n,。,例如:,unsigned char a=0 x9A;/*(9A)16=(154)10=(1001,1010)2*/,a=a2;/*(0010,0110)2=(26)16=(38)10*/,3.右移运算符,10.2位运算符的运算与应用右移运算符“”功能:将,10.2,位运算符的运算与应用,将其两边数据对应的二进制位按位进行“与”运算。二者全为,1,结果为:,1,,否则为:,0,。,例如:,a=10111010(0 xBA),b=01101110(0 x6E),a&b=00101010(0 x2A),结论,:“与,1,位与”为,1,,那么该位为,1,;“与,1,位与”为,0,,那么该位为,0,。“与,1,位与”可用于检测某个位是,1,还是,0,。,4.按位与运算符,10.2位运算符的运算与应用将其两边数据对应的二进制位,10.2,位运算符的运算与应用,4.按位与运算符,按位与的特殊用途,1,2,3,清零,取一个数中某些指定位,要想将哪一位保留下来,就与一个数进行,&,运算,此数在该位取,1,10.2位运算符的运算与应用4.按位与运算符按位与的特殊用,10.2,位运算符的运算与应用,将其两边数据对应的二进制位按位进行“或”运算。二者只要有一个为,1,结果为:,1,;否则为:,0,。(两者都为,0,时为,0,)。,00101011,(,|,),10010100,10111111,结论,:与,0,“位或”为,1,,那么该位为,1,;与,0,“位或”为,0,,那么该位为,0,。就是说任何位“与,0,位或”还是等于这一位(保持不变)。,按位或运算常用来对一个数据的某些位定值为,1,。如,a,是一个整数(,16,位),有表达式,a|0377,,则低,8,位全值为,1,,高,8,位保留原样。,5.按位或运算符,10.2位运算符的运算与应用将其两边数据对应的二进制位,10.2,位运算符的运算与应用,异或运算符,也称,XOR,运算符。将其两边数据对应的二进制位按位进行“异或”运算,若二者相同,结果为,0,,若二者不同(相异),结果为,1,。,00101011,(,),10010110,10111101,结论,:任何位“与,1,异或”,等价于对该位取反。,6.按位异或运算符,10.2位运算符的运算与应用异或运算符也称XOR运算,10.2,位运算符的运算与应用,(,1,)使特定位翻转,假设有,01111010,,想使其低,4,位翻转,即,1,变为,0,,变为,1,,可以将它与,00001111,进行,运算,即,01111010,(,),00001111,01110101,结果值的低,4,位正好是原数低,4,位的翻转。要使哪几位翻转就将与其进行,运算的该几位置为,1,即可。,按位异或运算符的应用,10.2位运算符的运算与应用 (1)使特定位翻转按位异,10.2,位运算符的运算与应用,(,2,)与,0,相,,保留原值,如,02200=022,00010010,(,),00000000,00010010,按位异或运算符的应用,10.2位运算符的运算与应用 (2)与0相,保留原值,10.2,位运算符的运算与应用,(,3,)交换两个值,不用临时变量,假如要将,a,和,b,的值交换,可以用以下赋值语句来实现:,a=ab;,b=ba;,a=ab;,按位异或运算符的应用,10.2位运算符的运算与应用 (3)交换两个值,不用临,全国等级,C,考试大纲,本模块主要考查常用位运算符的使用。通过对历年试卷内容的分析,本章属于非重点考查内容。只要了解位运算符的基本概念及使用,掌握简单的位运算即可。此部分知识点多出现在笔试考核,上机试题中一般不会出现。,1.,位运算符的含义和使用。,2.,简单的位运算。,考点,全国等级C考试大纲本模块主要考查常用位运算符的使用。通过,C,语言程序设计案例引导教程,Thank You!,不断学习,贵在坚持,C语言程序设计案例引导教程Thank You!不断学习,贵,