《C语言程序设计实用教程》课件第8章 位操作程序设计.ppt

上传人(卖家):momomo 文档编号:5787073 上传时间:2023-05-09 格式:PPT 页数:22 大小:346.50KB
下载 相关 举报
《C语言程序设计实用教程》课件第8章 位操作程序设计.ppt_第1页
第1页 / 共22页
《C语言程序设计实用教程》课件第8章 位操作程序设计.ppt_第2页
第2页 / 共22页
《C语言程序设计实用教程》课件第8章 位操作程序设计.ppt_第3页
第3页 / 共22页
《C语言程序设计实用教程》课件第8章 位操作程序设计.ppt_第4页
第4页 / 共22页
《C语言程序设计实用教程》课件第8章 位操作程序设计.ppt_第5页
第5页 / 共22页
点击查看更多>>
资源描述

1、8.1 位运算符位运算符8.2 位域位域8.3 位操作程序设计综合举例位操作程序设计综合举例8.1位运算符位运算符n6种位运算符种位运算符n位与位与&n位或位或|n位异或位异或 n位取反位取反 n 位左移位左移 n位运算的操作数为整型位运算的操作数为整型(char,short,int,long),运算结果是整型。,运算结果是整型。8.1位运算符位运算符8.1位运算符位运算符1.按位与按位与&参与运算的两个值,如果两个相应位都为参与运算的两个值,如果两个相应位都为1,则,则该位的结果为该位的结果为1,否则为,否则为0。即:即:0&0=0,0&1=0,1&0=0,1&1=1例如:例如:8.1位运算

2、符位运算符1.按位与按位与&n用来对操作数中的若干位置用来对操作数中的若干位置0,或者取操作数中,或者取操作数中的若干指定位。的若干指定位。例如:例如:char x;(1)将)将x的第的第4位和第位和第1位置位置0,11110110 x=x&0 xf6;掩码掩码0 xf6的的b3=0,b0=0 (2)取取x的低的低4位:位:x=x&0 x0f;掩码掩码0 x0f的的b7 b6 b5b4=0000 b3 b2 b1b0=1111 8.1位运算符位运算符2 按位或按位或|参与运算的两个值,只要两个相应位中有一参与运算的两个值,只要两个相应位中有一个为个为1,则该位的结果为,则该位的结果为1。即:即

3、:0|0=0,0|1=1,1|0=1,1|1=1例如:例如:8.1位运算符位运算符2.按位或按位或|n用来把操作数的某些特定位置用来把操作数的某些特定位置1.例如:将例如:将int 型的变量型的变量a的的b3、b4位置位置1:a=a|0 x18 掩码:掩码:00011000 8.1位运算符位运算符3.按位异或按位异或 参与运算的两个值,如果两个相应位不同,则参与运算的两个值,如果两个相应位不同,则结果为结果为1,否则为,否则为0。即:即:00=0,10=1,01=1,11=0例如:例如:8.1位运算符位运算符3.按位异或按位异或 n使某些特定的位翻转。使某些特定的位翻转。n如果是某位与如果是某

4、位与0异或,结果是该位的原值;异或,结果是该位的原值;n如果是某位与如果是某位与1异或,则结果与该位原来的异或,则结果与该位原来的值相反。值相反。例如:要使例如:要使11010110的的b4、b5翻转翻转 将数与将数与00011000进行按位异或运算。进行按位异或运算。11010110 00011000 110011108.1位运算符位运算符4 按位取反按位取反 一元运算法,对数据的每个二进制位取反一元运算法,对数据的每个二进制位取反.即把即把1变为变为0,把,把0变为变为1例如:例如:8.1位运算符位运算符5移位移位(1)左移运算()左移运算()将一个数的各二进制位全部右移若干位。将一个数的

5、各二进制位全部右移若干位。右移后,低位舍弃右移后,低位舍弃;高位:若是无符号数高位:若是无符号数,补补0;若是有符号数,补若是有符号数,补“符号位符号位”。n一个无符号数,右移一位相当于除一个无符号数,右移一位相当于除2取商取商.8.1位运算符位运算符5移位移位 某一变量所包含的各二进位按指定的方某一变量所包含的各二进位按指定的方向移动指定的位向移动指定的位.例例8-1 位运算的应用位运算的应用void main()unsigned int w1=0 x155,w2=0 x1c7,w3=0 x52;int w4=-128,w5=128;printf(%x%x%x n,w1&w2,w1|w2,w

6、1w2);printf(%x%x%x n,w1,w2,w3);printf(%x%x%x n,w1w2,w1&w2,w1|w2|w3);printf(%x%x n,w1|w2&w3,w1&w2|w3);printf(%x%x n,(w1&w2),w1|w2);printf(%d%d n,w41,w51);8.2位域位域 BitFieldn有些信息在存储时,并不需要占用一个完整的有些信息在存储时,并不需要占用一个完整的存储单元,存储单元,而只需一个或几个二进制位。而只需一个或几个二进制位。例如例如,存放一个开关量时,只有存放一个开关量时,只有0和和1 两种状态,两种状态,只要用一个二进位即可。只

7、要用一个二进位即可。n位域位域:把一个存储单元中的二进制划分为几个把一个存储单元中的二进制划分为几个不同的区域,并说明每个区域的位数。不同的区域,并说明每个区域的位数。n每一个域有一个域名,允许在程序中按域名进行操每一个域有一个域名,允许在程序中按域名进行操作。作。8.2位域位域n位域的声明形式:位域的声明形式:struct 结构体名结构体名 类型类型1 成员成员1:长度长度;类型类型2 成员成员2:长度长度;类型类型n成员成员3:长度长度;位域变量位域变量;8.2位域位域例如:例如:struct BitSeg1 unsigned char a:4;unsigned char b:3;unsi

8、gned char c:1;flags;声明位域变量声明位域变量flags由三个成员由三个成员a、b、c组成,组成,a占有占有4bits,b占有占有3bits,c占有占有1bits,整个变,整个变量量flags分配的存储单元大小为分配的存储单元大小为char类型的存储类型的存储单元,大小为单元,大小为1Byte。8.2位域位域例如:例如:struct BitSeg2 unsigned char f1:1;unsigned char f2:1;unsigned char f3:1;unsigned char f4:3;unsigned char f5:7;/从第二个从第二个char型的存储单元分

9、配成员型的存储单元分配成员f5;声明的结构类型声明的结构类型struct BitSeg2占用的空间大占用的空间大小为小为2Bytes。其中成员。其中成员f1、f2、f3、f4占用占用第一字节,第一字节,f5占用第二字节。占用第二字节。例例8-2 位域的应用。位域的应用。typedef struct unsigned char f1:1;unsigned char f2:1;unsigned char f3:1;unsigned char type:4;unsigned char index:8;Flags;void main()Flags flags;flags.f1=1;flags.f2=0

10、;flags.f3=1;flags.type=0 x7;flags.index=0 x81;printf(%x%x%x%1x%2xn,flags.f1,flags.f2,flags.f3,flags.type,flags.index);printf(The size of variable flags is%dn,sizeof(flags);1 0 1 7 81The size of variable flags is 28.3位操作程序设计综合举例位操作程序设计综合举例 例例8-3 将一个无符号八位二进制数的低将一个无符号八位二进制数的低4位与高位与高4位进行交换,并以十六进制格式位进行交换

11、,并以十六进制格式输出原数和交换后的结果。输出原数和交换后的结果。#include void main()unsigned char flag1=0 x8f;unsigned char flag2,flag3,flag4;flag2=flag1&0 x0f;/屏蔽高屏蔽高4位后位后,将低将低4位送给位送给flag2flag2=flag2=4;/将高将高4位移到低位移到低4位位flag4=flag2|flag3;printf(%x n,flag1);printf(%x n,flag4);8ff8例例8-4 编写一个带参数的宏编写一个带参数的宏clearBit(x,n),用于,用于将将x的第的第n位置位置0,假设,假设n=0。#include /(0 x1n)是第是第n位是位是1,其他位是,其他位是0#define clearBit(y,n)y&=(0 x1n)void main()unsigned x=0 xfe78feaf;unsigned y=0 xfeaf;clearBit(x,31);clearBit(y,1);printf(x=%x,y=%xn,x,y);x=7e78feaf,y=fead本章小结本章小结

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

当前位置:首页 > 大学
版权提示 | 免责声明

1,本文(《C语言程序设计实用教程》课件第8章 位操作程序设计.ppt)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|