C语言程序设计 教学课件 ppt 作者 许薇 武青海 C语言第十一章

上传人:E**** 文档编号:89370275 上传时间:2019-05-24 格式:PPT 页数:15 大小:220KB
返回 下载 相关 举报
C语言程序设计 教学课件 ppt 作者  许薇 武青海 C语言第十一章_第1页
第1页 / 共15页
C语言程序设计 教学课件 ppt 作者  许薇 武青海 C语言第十一章_第2页
第2页 / 共15页
C语言程序设计 教学课件 ppt 作者  许薇 武青海 C语言第十一章_第3页
第3页 / 共15页
C语言程序设计 教学课件 ppt 作者  许薇 武青海 C语言第十一章_第4页
第4页 / 共15页
C语言程序设计 教学课件 ppt 作者  许薇 武青海 C语言第十一章_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《C语言程序设计 教学课件 ppt 作者 许薇 武青海 C语言第十一章》由会员分享,可在线阅读,更多相关《C语言程序设计 教学课件 ppt 作者 许薇 武青海 C语言第十一章(15页珍藏版)》请在金锄头文库上搜索。

1、第十一章 位运算,信息工程学院,位运算是C语言的低级语言特性,广泛应用于对底层硬件,外围设备的状态检测和控制。本章介绍了位运算的基本概念及其相关操作,位运算的典型应用及位域的使用。,本章导读 了解位运算符的含义及使用方法 位运算操作及其应用 了解位段的概念和使用方法,位运算,11.1位运算基本概念,1.位运算的概念 位运算实际就是对表示计算机中的数进行操作的运算符。 2.基本位运算符 &:按位与 规则:将其两边的运算对象的对应位逐一进行按位逻辑与运算。 |:按位或 规则:将其两边的运算对象的对应位逐一进行按位逻辑或运算。 :按位异或 规则:参加运算的两个二进制位相同,则为假,不相同为真。 :按

2、位取反 规则:单目运算符,对一个二进制数按照位取相反的数值。,C语言位运算符表,说明: 1.位运算符中除以外,均为二目(元)运算符,即要求两侧各 有一个运算量。 2.运算量只能是整形或字符型的数据,不能为实型数据。,:右移 规则:将一个数的二进制位全部右移若干位,对于移动后空出的位,可以用0或1来补充,根据具体情况而定。各位运算符的基本含义如表所示。,1.按位与运算 例如:4&5可写算式如下: 4: 00000100 (&) 5: 00000101 00000100 因此,4&5的值得4。 按位与运算主要用途:用来对某些位清0或保留某 些位。,11.2 位运算符的运算功能举例,位运算符 程序运

3、行结果如下所示: a=9,b=5,c=1 2.按位或运算 例如: 060 | 017 将八进制数60与八进制数17进行按位或运算。 00110000 (|) 00001111 00111111 如果想使一个数a的低4位改为1,只需将a与017或0xf进行按位或运算即可。,位运算符|使用举例 main() int a=9,b=5,c; c=a|b; printf(“a=%d,b=%d,c=%dn“,a,b,c); 程序运行结果如下所示: a=9,b=5,c=13,3.按位异或运算 异或运算符也称XOR运算符。它的规则是若参加运算的两个二进位同号,则结果为0(假);异号则为1(真)。 即: 00=

4、0,11=0,01=1,10=1 “异或”的意思是判断两个相应的位值是否为“异”,为“异”(值不同)就取真(1),否则为假(0)。 假设有01111010,想使其低4位翻转,即1变为0,0变为1。可以将它与00001111进行运算,即 01111010 () 00001111 01110101,位运算符使用举例 main() int a=9,b=5,c; c=ab; printf(“a=%d,b=%d,c=%dn“,a,b,c); 程序运行结果如下所示: a=9,b=5,c=12 4.求反运算 字符为单目运算符,具有右结合性。其功能是对参与运算的数的各二进位按位求反,即将0变为1,1变为0。

5、例如:9的运算为: (0000000000001001) 结果为: 1111111111110110 运算符的优先级别比算术运算符、关系运算符、逻辑运算符和其他位运算符都高,例如:a&b,先进行a运算,然后进行&运算。,5.左移运算 算符“”是双目运算符。其功能是把“ ”左边的运算数的各二进位全部右移若干位,“”右边的数指定移动的位数。 例如: 设 a=15,a2 表示把00000000000001111右移为 0000000000000011(十进制3)。 有的系统移入0,有的移入1。移入0的称为“逻辑右移”,即简单右移。移入l的称为“算术右移”。,7.位运算赋值运算符 除按位取反运算外,其

6、余5个位运算符均可与赋值运算符一起,构成复合赋值运算符 如: &=、|+、=、= 例如: a&=b相当于a=a&b。 a=2相当于a=a2。 8.不同长度的数据进行位运算 (1)对无符号数和有符号中的正数,补0; (2)有符号数中的负数,补1。 例如:a&b,a为long,b为int型,如果b为正数,则左侧应补满0。如果b为负数,左侧应补满1。如果b为无符号数,则左侧应补满0。,11.3 位段,在过程控制、参数检测或数据通信领域时,控制信息往往只占一或几个二进制位,常常在一个字节中存放几个信息。C语言允许一个结构体中以位为单位来指定其成员所占内存长度,这种以位为单位的成员为“位段”或“位域”。

7、 有些信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位域来表示。,11.3.1位域的定义和位域变量的说明,位域的定义和位域变量的说明位域定义与结构定义相仿,其形式为: struct 位域结构名 位域列表 ; 其中位域列表的形式为: 类型说明符 位域名:位域长

8、度 例如: struct packed-data unsigned a:2; unsigned b:6; unsigned c:4; unsigned d:4; int i; data;,例如: struct packed-data unsigned a:2; unsigned b:6; unsigned c:4; unsigned d:4; int i; data; 关于位段的定义和引用,有几点要说明: (1)位段成员的类型必须指定为unsigned或int类型。 (2)若某一位段要从另一个字开始存放。 可以用以下形式定义: unsigned a:2; unsigned b:2; unsig

9、ned :0; unsigned c:3;(另一存储单元) (3)一个位段必须存储在同一存储单元中,不能跨两个单元。 如果第一个单元空间不能容纳下一个位段,则该空间不用,而从下一个单元起存放该位段。,11.3.2位运算应用举例,从键盘上输入一个正整数给整型变量num,输出整型变量num的第8到第11位构成的数。 main() int num, mask; printf(“Input a integer number: “); scanf(“%d“, ,本章小结 通过本章学习,掌握C语言二进制位运算和位段的基本技巧及其应用,位段的使用方法,尤其是对位运算,要重点掌握。加深体会C语言适合编写系统程序的特点。主要知识点如下: 1.位运算是语言的一种特殊运算功能,它是以二进制位为单位进行运算的。位 运算符只有逻辑运算和移位运算两类。位运算符可以与赋值符一起组成复合赋值符。如&=,|=,=,=,=等。 2.利用位运算可以完成汇编语言的某些功能,如置位,位清零,移位等。还可进行数据的压缩存储和并行运算。 3.位域在本质上也是结构类型,不过它的成员按二进制位分配内存。其定义、说明及使用的方式都与结构相同。 位段(域)提供了一种手段,使得可在高级语言中实现数据的压缩,节省了存储空间,同时也提高了程序的效率。,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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

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