《C语言设计课件:第12章 位运算》由会员分享,可在线阅读,更多相关《C语言设计课件:第12章 位运算(17页珍藏版)》请在金锄头文库上搜索。
1、第第第第12121212章章章章 位运算位运算位运算位运算n 位运算是指位运算是指按二进制位进行的运算按二进制位进行的运算。因为在。因为在系统软件中,常要处理二进制位的问题。系统软件中,常要处理二进制位的问题。n 例如:将一个存储单元中的各二进制位左移例如:将一个存储单元中的各二进制位左移或右移一位,两个数按位相加等。或右移一位,两个数按位相加等。n 语言提供位运算的功能,与其他高级语言语言提供位运算的功能,与其他高级语言(如(如PASCALPASCAL)相比,具有很大的优越性。)相比,具有很大的优越性。 C语言的位运算符分为两种语言的位运算符分为两种:n 位逻辑运算符位逻辑运算符 按位按位与
2、与 取取反反 | 按位按位或或 按位按位异或异或 n 位移运算符位移运算符 右移右移注意:注意:(1)(1)位运算符中除以外,均为位运算符中除以外,均为二目(元)运算符,即要求二目(元)运算符,即要求两侧各有一个运算量。两侧各有一个运算量。(2)(2)运算量只能是整型或字符型运算量只能是整型或字符型的数据的数据,不能为实型数据。,不能为实型数据。“按位与按位与”运算符()运算符()n按位与是指:参加运算的两个数据,按二进制按位与是指:参加运算的两个数据,按二进制位进行位进行“与与”运算。如果两个相应的二进制位运算。如果两个相应的二进制位都为,则该位的结果值为;否则为。都为,则该位的结果值为;否
3、则为。 即:即: , ,n 例:例:3&4=0“按位或按位或”运算符(运算符(|)n两个相应的二进制位中只要有一个为,该位两个相应的二进制位中只要有一个为,该位的结果值为。的结果值为。 即:即: |,|, |,| 例:例: 060|017,将八进制数将八进制数60与八进制数与八进制数17进行按位或运算。进行按位或运算。 结果为结果为63. 00110000 00110000| 00001111| 00001111 00111111 00111111 “异或异或”运算符(运算符( )n异或运算符异或运算符 也称也称XOR运算符。它的规则是:运算符。它的规则是: 若参加运算的两个二进制位若参加运算
4、的两个二进制位 同号同号则结果为则结果为(假)(假) 异号异号则结果为则结果为(真)(真)即即: 0 0=0,0 1=1,1 0=1, 1 1=0“取反取反”运算符()运算符()n是一个单目(元)运算符,用来对一个二进是一个单目(元)运算符,用来对一个二进制数按位取反,即将变,将变。例如,制数按位取反,即将变,将变。例如,是对八进制数(即二进制数是对八进制数(即二进制数)按位求反。)按位求反。左移运算符()左移运算符()n左移运算符是用来将一个数的各二进制位全部左移运算符是用来将一个数的各二进制位全部左移若干位。左移若干位。 n例如:例如:a=)n右移运算符是右移运算符是a2表示将表示将a的各
5、二进制位右移的各二进制位右移2位,移到右端的低位被舍弃位,移到右端的低位被舍弃,对无符号数对无符号数,高高位补位补0。n 例如:例如:a=017时时: a的值用二进制形式表示为的值用二进制形式表示为00001111, 舍舍弃低弃低2位位11: a2=00000011n 右移一位相当于除以右移一位相当于除以2 右移右移n位相当于除以位相当于除以2n。 右移运算符右移运算符()n 对对无符号数无符号数,右移时左边高位移入右移时左边高位移入0;n 对于对于有符号有符号的值的值,如果如果原来符号位为原来符号位为0(该数为该数为正正),则左边也是移入则左边也是移入0。n对于对于有符号有符号的值的值,如果
6、如果符号位原来为符号位原来为1(即负数即负数),则左边移入则左边移入0还是还是1,要取决于所用的计算机要取决于所用的计算机系统。有的系统移入系统。有的系统移入0,有的系统移入有的系统移入1。移入。移入0的称为的称为“逻辑右移逻辑右移”,即简单右移;移入即简单右移;移入1的的称为称为“算术右移算术右移”。 位运算符的应用位运算符的应用n例例1: 判断判断int型变量型变量a是奇数还是偶数。是奇数还是偶数。 a&1 = 0 :偶数:偶数a&1 = 1 :奇数:奇数 使用使用a&1还可以获得还可以获得a的二进制最低位。的二进制最低位。n例例2:交换两个数的值,不使用中间变量。:交换两个数的值,不使用
7、中间变量。 x = y; y = x; x = y; n例例3:使特定位翻转:使特定位翻转 设有,想使其低位翻转,设有,想使其低位翻转,即变为,变为。可以将它与即变为,变为。可以将它与进行进行 运算,即:运算,即: 0111101001111010 0000111100001111 0111010101110101 运算结果的低位正好运算结果的低位正好是原数低位的翻转。可是原数低位的翻转。可见,要使哪几位翻转就将见,要使哪几位翻转就将与其进行与其进行运算的该几位运算的该几位置为即可。置为即可。n 例例4:对数字信号进行操作。:对数字信号进行操作。 微机控制系统中,经常要测试系统运行状态,微机控
8、制系统中,经常要测试系统运行状态,然后控制系统运行,从而实现自动化功能。我们然后控制系统运行,从而实现自动化功能。我们经常用字节的不同位来代表各个不同信号,如温经常用字节的不同位来代表各个不同信号,如温度报警信号,电源停电报警信号,压力报警信号度报警信号,电源停电报警信号,压力报警信号等,这些信号既有输出又有输入。对这些信号常等,这些信号既有输出又有输入。对这些信号常用的操作有:取信号的某一位;对某一位清零;用的操作有:取信号的某一位;对某一位清零;对某一位置对某一位置 等。等。int exambit(int rdinnum,int num)/取信号取信号rdinnum的第的第num位位int
9、 measure=1; measure=(num-1); return(rdinnum&measure)?1:0);int setzero(int rdinnum,int num)/对信号对信号rdinnum的第的第num位清零位清零int measure=1; measure=(num-1); return(rdinnum&measure);int setone(int rdinnum,int num)/对信号对信号rdinnum的第的第num位置位置1 int measure=1; measure=(num-1); return(rdinnum|measure);本章作业本章作业n编程,测试你所用的计算机系统一个整型变编程,测试你所用的计算机系统一个整型变量占多少位量占多少位?n编程,测试你所用的计算机系统的编程,测试你所用的计算机系统的C编译程编译程序是逻辑右移还是算术右移?序是逻辑右移还是算术右移?