C语言_第12章.ppt

上传人:少林足球 文档编号:4211577 上传时间:2019-10-28 格式:PPT 页数:24 大小:2.32MB
返回 下载 相关 举报
C语言_第12章.ppt_第1页
第1页 / 共24页
C语言_第12章.ppt_第2页
第2页 / 共24页
C语言_第12章.ppt_第3页
第3页 / 共24页
C语言_第12章.ppt_第4页
第4页 / 共24页
C语言_第12章.ppt_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《C语言_第12章.ppt》由会员分享,可在线阅读,更多相关《C语言_第12章.ppt(24页珍藏版)》请在三一文库上搜索。

1、第十二章 位操作,第十二章 位操作,12.1 位与字节 12.2 位运算操作符 12.3 循环移位 12.4 位段 12.5 实战练习,本章学习内容,12.1 位与字节,前面介绍的各种运算都是以字节为单位进行的,很多系统中常要求在位(bit)这一级别存储单位上进行运算和处理 计算机中最小的存储单位称为位(bit),它可以存储0或1 字节(byte)是常用的计算机存储单位,1字节占8位,12.2 位运算操作符,C语言提供了位运算的功能,提供了6种位运算符,12.2.1 “与”运算符,功能:双目运算符,将参与运算的两个数各自对应的二进制位相“与” 只有对应的两个二进制位均为1时,运算结果才为1,否

2、则结果为0,12.2.1 “与”运算符,例如:25&18 = 16,应用 按位与运算通常用于对某些位清0或保留某些位,例如要把a的高8位清0,保留低8位,可作a&255运算(0000000011111111) 高8位全0,与运算结果肯定为0,低8位全1,与运算结果保留原位,12.2.2 “或”运算符,功能:双目运算符,将参与运算的两个数各自对应的二进制位相或,只要对应的两个二进制位有一个为1,结果位就是1,12.2.2 “或”运算符,例如:25|18 = 27,应用 按位“或”运算通常用来对某些位进行置1操作或保留某些位的原值 例如要把a的高8位保留低8位置1,可作a&255运算(000000

3、0011111111) 高8位为0,或运算结果保留原位,低8位为1,或运算结果全是1,12.2.3 “取反”运算符,功能:单目运算符,右结合性,将参与运算的数的各个二进制位按位取反,即0取反为1,1取反为0,12.2.3 “取反”运算符,例如:25运算如下:,说明 取反位运算符是将运算数的二进制位按位取反,而不是将运算数符号位取反,12.2.4 “异或”运算符,功能:双目运算符,将参与运算的两个数对应的二进制位相异或,当对应的二进制位相同时结果为0,相异时结果为1,12.2.4 “异或”运算符,例如:2518=11,应用 异或运算通常用来使某个数的特定位翻转或保留,例如要把a的高8位保留,低8

4、位翻转,可作a255运算(0000000011111111) 高8位全是0,异或运算会保留原位(0与0异或为0, 1与0异或为1) 低8位全是1,异或运算将低8位翻转(0与1异或为1, 1与1异或为0),12.2.4 “异或”运算符,注意 1. 一个数与自身异或,结果为0 2. 一个数与0异或,数保持不变 3. 一个数与1异或,结果为该数取反,12.2.5 “左移”运算符,功能:双目运算符,将运算符左边的运算数的各个二进制位全部左移若干位,移动的位数由右边的运算数指定,左移过程中高位丢弃,低位补0,例如:252 = 100,说明 若左移过程中,高位丢弃的位不含1,那么左移一位的结果相当于在原数

5、的基础上乘以2,所以左移运算通常可以代替乘法运算,12.2.6 “右移”运算符,功能:双目运算符,将左边的运算数的各个二进制位全部右移若干位,移动的位数由右边的运算数指定,右移过程中低位丢弃,高位补符号位 例如:252=6,相当于25除以4,说明 在右移操作中,若高位按符号位进行补位(即正数高位补0,负数高位补1)时,称为算术右移;若无论正数、负数均补0,则称为逻辑右移,12.3 循环移位,循环移位就是左移时将移出的高位放在该数的最低位或者右移时将移出的低位放在该数的最高位 循环移位必须借助位运算操作符,12.3 循环移位,循环左移实现过程 1. 先将x的高n位,存放到z的低n位中:z=x(3

6、2-n); 2. 将x左移n位:y=xn; 3. 将y与z进行按位或运算:y = y|z;,12.3 循环移位,循环右移实现过程 1. 先将x的低n位,存放到z的高n位中:z=xn; 3. 将y与z进行按位或运算:y = y|z;,12.4.1 位段的概念与定义,有些信息在存储时,并不需要占用一个完整的字节,只需要占用一个或几个二进制位,为了节省存储空间,C语言提供一种数据结构,称为位段,或位域 位段就是把一个字节中的二进制位划分为几个不同的区域,并说明每个区域所占的位数,每个域都有一个域名,允许程序按域名进行操作,一般形式: struct 位段结构名 位段列表; ; 其中位段列表的形式为。

7、类型说明符 位段名:位段长度;,12.4.1 位段的概念与定义,例如: struct sType int a:8; int b:2; int c:6; data; 说明:位段必须被定义成int、unsigned int或 signed int中的一种,12.4.2 位段相关说明,1. 位段属于一种结构类型,对于位段类型和位段变量的定义,以及对位段成员的引用均与结构体类型和结构体变量相同 2. 一个位段必须存放在同一个字节中,不能跨两个字节 例如: struct sType unsigned int a:4; unsigned int :0; /*空域*/ unsigned int b:4; /

8、*从下一个字节开始存放*/ unsigned int c:4; ;,12.4.2 位段相关说明,3. 由于位段不允许跨两个字节,所以位段的长度不能大于一个字节的长度,也就是说位段的长度不能超过8位二进制位 4. 位段可以没有位段名,这时它只是用来作填充或调整位置,无名的位段是不能使用的 5. 可以用“%d”、“%x”、”%u”、”%o”等格式符,以整数形式输出位段 6. 在整值表达式中引用位段时,系统自动将位段转换成整数,12.5 实践练习,1从键盘输入两个数,对这两个数进行“与”和“或”运算,并输出结果。 2从键盘输入一个数,对该数进行“左移”和“右移”操作运算,并输出结果。 3从键盘输入一个数,对该数进行“循环左移”和“循环右移”操作,并输出结果。,END,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1