《C语言程序设计(Visual C++ 6.0环境)》电子教案 第8章 位运算

上传人:E**** 文档编号:89400106 上传时间:2019-05-24 格式:PPT 页数:46 大小:925KB
返回 下载 相关 举报
《C语言程序设计(Visual C++ 6.0环境)》电子教案 第8章  位运算_第1页
第1页 / 共46页
《C语言程序设计(Visual C++ 6.0环境)》电子教案 第8章  位运算_第2页
第2页 / 共46页
《C语言程序设计(Visual C++ 6.0环境)》电子教案 第8章  位运算_第3页
第3页 / 共46页
《C语言程序设计(Visual C++ 6.0环境)》电子教案 第8章  位运算_第4页
第4页 / 共46页
《C语言程序设计(Visual C++ 6.0环境)》电子教案 第8章  位运算_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《《C语言程序设计(Visual C++ 6.0环境)》电子教案 第8章 位运算》由会员分享,可在线阅读,更多相关《《C语言程序设计(Visual C++ 6.0环境)》电子教案 第8章 位运算(46页珍藏版)》请在金锄头文库上搜索。

1、,本章导读 本章是初学C语言者的一大难点,属较高要求,适合于编写系统软件的需要。读者应在掌握了计算机的几种基本数值编码的基础上,开始本章的学习。通过本章的学习我们将近一步体会到C语言既具有高级语言的特点,又具有低级语言的功能,它能直接对计算机的硬件进行操作,因而它具有广泛的用途和很强的生命力。, C语言程序设计 (Visual C+ 6.0环境),返回本书目录,第8章 位运算,本章主要知识点 (1) 位运算符的含义及使用 (2) 位运算的特殊应用 (3) 位复合赋值运算符的含义及使用 (4) 位段的定义、位段变量的说明及引用,第8章 位运算, C语言程序设计 (Visual C+ 6.0环境)

2、,返回本章导读,8.1 位运算的C程序实例,8.2 二进制位运算,8.3 位段,8.4 综合实训, C语言程序设计 (Visual C+ 6.0环境),返回本章目录,8.1 位运算的C程序实例,【例8.1】,从结果可以看出,在这个程序中出现的几种运算符显然不同于以前,它们不是两个十进制数值之间简单的运算,而是十进制数对应的二进制“位”的运算。,【例8.1】实例, C语言程序设计 (Visual C+ 6.0环境),返回本节目录,程序演示,【例8.1】编写程序完成对两个整型量进行按位逻辑运算。程序名为l8_1.cpp。 #include “stdio.h“ main() int a,b; pri

3、ntf(“input the numbers: “); scanf(“%d,%d“, /*输出 a的按位取反结果*/ ,运行情况为: input the numbers: 输入:9,5 1 13 12 65526,例8.1程序演示,返回例题,返回本节目录, C语言程序设计 (Visual C+ 6.0环境),返回本章目录,8.2 二进制位运算,8.2.1 二进制位运算,8.2.2 位复合赋值运算符,所谓位运算是指进行二进制位的运算。在系统软件中,常要处理二进制位的问题。C语言提供了按位运算的功能,这使得它与其它高级语言相比,具有很强的优越性。, C语言程序设计 (Visual C+ 6.0环境

4、),8.2.1 二进制位运算,语言提供了六种位运算符(见表8-1):,表8-1位逻辑运算与移位运算,返回本节目录, C语言程序设计 (Visual C+ 6.0环境),8.2.1 二进制位运算,说明: 运算量只能是整型或字符型的数据,不能为实型或结构体等类型的数据。 六个位运算符的优先级由高到低依次为:取反、左移和右移、按位与、按位异或、按位或。 两个不同长度的数据进行位运算时,系统会将二者按右端对齐。下面对各种位运算符介绍如下:,返回本节目录,1“按位与”运算符(&),2“按位或”运算符(|),3“按位异或”运算符(),4“求反”运算符 (),5“左移”运算符(),6“右移”运算符(), C

5、语言程序设计 (Visual C+ 6.0环境),1“按位与”运算符(&),(1)规则: 参与运算的两数(以补码方式出现)各对应的二进位相与(即逻辑乘),只有对应的两个二进位均为1时,结果位才为1,否则为0,它是双目运算符。即:0&0=0;0&1=0;1&0=0;1&1=1。 例如: 9&5可写算式如下: 9的二进制补码: 0 0 0 0 1 0 0 1 5的二进制补码: 0 0 0 0 0 1 0 1 & _ 0 0 0 0 0 0 0 1(1的二进制补码) 可见9&5=1。,返回8.2.1目录, C语言程序设计 (Visual C+ 6.0环境),1“按位与”运算符(&),(2)特殊用途:

6、 清零 按位与运算通常用来对某些位清0。由按位与的规则可知:为了使某数的指定位清零,可将该数按位与一特定数。该数中为1的位,特定数中相应位应为0;该数中为0的位,特定数中相应位可以为0也可以为1。由此可见,能对某一个数的指定位清零的数并不唯一。 【例8.2】 取一个数中某些位 可将该数与一个特定数进行&运算,对于要取的那些位,特定数中相应的位设为1。【例8.3】 取出数中某一位 要相将一个数的某一位保留下来,可将该数与一个特定数进行&运算,特定数的相对应的那位应为1。【例8.4】,返回本节目录,【例8.2】实例, C语言程序设计 (Visual C+ 6.0环境),返回1目录,程序演示,【例8

7、.2】对原数00110110中为1的位清零。 原数补码: 0 0 1 1 0 1 1 0 清零的数: 1 1 0 0 0 0 0 0 (或01000000、00000000等) ,运行情况为: a=36 b=c0 c=0,例8.2程序演示,返回例题,返回1目录,【例8.3】实例, C语言程序设计 (Visual C+ 6.0环境),返回1目录,程序演示,【例8.3】把a的高八位清0,保留低八位。 可作a ,运行情况为: 输入:920 a=398 b=ff c=98,例8.3程序演示,返回例题,返回1目录,【例8.4】实例, C语言程序设计 (Visual C+ 6.0环境),返回1目录,程序演

8、示,【例8.4】编写程序将a(=9)的最低位取出。程序名为l8_4cpp。 #include “stdio.h“ main() int a=9,b=1,c; c=a 运行情况为: a=9 b=1 c=1,例8.4程序演示,返回例题,返回1目录, C语言程序设计 (Visual C+ 6.0环境),2“按位或”运算符(|),(1)规则 参与运算的两数(以补码出现)各对应的二进位相或(即逻辑加)。只要对应的两个二进位有一个为1时,结果位就为1,它是双目运算符。即:0|0=0;0|1=1;1|0=1;1|1=1。 例如:9|5可写算式如下:0 0 0 0 1 0 0 1 0 0 0 0 0 1 0

9、1 | _ 0 0 0 0 1 1 0 1 (十进制为13) 可见9|5=13。 (2)特殊用途 将一个数据的某些指定的位置为1。 将该数按位或一个特定的数,该特定的数的相应位置为1。【例8.5】,返回8.2.1目录,【例8.5】实例, C语言程序设计 (Visual C+ 6.0环境),返回2目录,【例8.5】将一个数的低5位置为1。程序名为l8_5.cpp。 只需将该数与“00011111”进行 运行情况为: 输入:5 a=5 b=1f c=1f,程序演示,例8.5程序演示,返回例题,返回2目录, C语言程序设计 (Visual C+ 6.0环境),3“按位异或”运算符(),(1)规则 参

10、与运算的两数(以补码出现)各对应的二进位相异或,当两对应的二进位相异时,结果为1,它是双目运算符。即:00=0;01=1;10=1;11=0。 例如:95可写成算式如下:0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 1 _ 0 0 0 0 1 1 0 0 (十进制为12) 可见95=12。 (2)特殊用途 使特定位翻转 【例8.6】 要使哪几位翻转就将与其进行“按位异或”运算的数的相应位置为1。 使特定位保留原值 要使哪几位保留原值就将与其进行“按位异或”运算的数的相应位置为0。 交换两个值,不用临时变量 【例8.7】,返回8.2.1目录,【例8.6】实例, C语言程序设计 (V

11、isual C+ 6.0环境),返回3目录,【例8.6】将01110001的低4 位翻转,高4位保留原值。 0 1 1 1 0 0 0 1 0 0 0 0 1 1 1 1 _ 0 1 1 1 1 1 1 0 (十进制126) 程序可写为: #include “stdio.h“ main() int a=0x71,b=0xf,c; c=ab; printf(“a=%xnb=%xnc=%xn“,a,b,c); 运行情况为: a=71 b=f c=7e,程序演示,例8.6程序演示,返回例题,返回3目录,【例8.7】实例, C语言程序设计 (Visual C+ 6.0环境),【例8.7】设有整型数 a

12、=5,b=7。编写程序利用位运算,将a和b的值互换。 程序中,通过顺序使用a=ab;b=ba;a=ab;三个赋值语句将两变量a、b的值互换。具体计算过程如下: 第一步: a 0000000000000101 b 0000000000000111 a=ab 0000000000000010 第二步: a 0000000000000010 b 0000000000000111 b=ba 0000000000000101 (b的值为5) 第三步: a 0000000000000010 b 0000000000000101 a=ab 0000000000000111 (a的值为7),返回3目录,【例8

13、.7】实例, C语言程序设计 (Visual C+ 6.0环境),程序名为l8_7.cpp。 #include “stdio.h“ main() int a=5,b=7; printf(“a=%d,b=%dn“,a,b); a=ab;b=ba;a=ab; printf(“a=%d,b=%dn“,a,b); 运行情况为: a=5,b=7 a=7,b=5,程序演示,返回3目录,例8.7程序演示,返回例题,返回3目录, C语言程序设计 (Visual C+ 6.0环境),4“求反”运算符 (),(1)规则 对参与运算的数的各二进位按位求反,它是单目运算符,具有右结合性。即:0=1;1=0。 例如:9

14、的运算为 0000000000001001 _ 1111111111110110 (2)用途 适当的使用可增加程序的移植性。如要将整数a的最低位置为0,我们通常采用语句a=a来完成,因为这样对a是16位数还是32位数均不受影响。,返回8.2.1目录, C语言程序设计 (Visual C+ 6.0环境),5“左移”运算符(),(1)规则 把“”左边的运算数的各二进位全部左移若干位,由“”右边的数指定移动的位数,高位丢弃,低位补0,它是双目运算符。 例如:a4指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。 (2)特殊用途 左移1位相当

15、于该数乘以2;左移n位相当于该数乘以2n 。但此结论只适用于该数左移时被溢出舍弃的高位中不包含1的情况。 左移比乘法运算快得多,有的C编译系统自动将乘2运算用左移一位来实现。,返回8.2.1目录, C语言程序设计 (Visual C+ 6.0环境),6“右移”运算符(),(1)规则 把“”左边的运算数的各二进位全部右移若干位,“”右边的数指定移动的位数。 (2)特殊用途 右移1位相当于该数除以2;右移n位相当于该数除以2n。 (3)说明 对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0;而为负数时,符号位为1,最高位是补0还是补1取决于计算机系统的规定。移入0的称为“逻辑右移”;移入1的称为“算术右移”。我们可以通过编写程序来验正所使用的系统是采用“逻辑右移”还是“算术右移”。很多系统规定为补1,即“算术右移”。 如: a: 1001011111101101 a1: 0100101111110110 ( 逻辑右移) a1: 1100101111110110 ( 算术右移),返回8.2.1目录, C语

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号