Clanguage第12章位运算.ppt
《Clanguage第12章位运算.ppt》由会员分享,可在线阅读,更多相关《Clanguage第12章位运算.ppt(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第12章 位运算位运算1.1.位运算符及其应用位运算符及其应用2.2.位段及其应用位段及其应用 12.1位运算符和位运算表达式位运算符和位运算表达式n nC C语言中提供了如下语言中提供了如下6 6种的位运算符:种的位运算符:&按位与按位与按位与按位与|按位或按位或按位或按位或 按位异或按位异或按位异或按位异或 右移右移右移右移 按位取反按位取反按位取反按位取反提示:只允许对提示:只允许对整型、字符整型、字符型数据进行位运算,而型数据进行位运算,而实型数据实型数据不能进行位运算。不能进行位运算。1.1.位运算规则位运算规则位运算规则位运算规则:2.2.例例12.112.1若若 a=a=(151
2、5)1010=(00001111)=(00001111)2 2,b=(80)b=(80)1010=(01010000)=(01010000)10103.3.则则:a&b=00000000,a|b=01011111,a&b=00000000,a|b=01011111,4.4.ab=01011111,a=11110000ab=01011111,a=11110000A AB BA&BA&BA|BA|BABABaa0 00 00 00 00 01 10 01 10 01 11 11 11 10 00 01 11 10 01 11 11 11 10 00 01.1.位运算的应用:位运算的应用:2.2.1
3、 1)按位与按位与 运算经常用于将某些二进制位运算经常用于将某些二进制位屏蔽掉屏蔽掉。3.3.例例12.212.2编写函数:使一个整数编写函数:使一个整数k k中的低中的低4 4位置位置0 0。分析:用分析:用“与与”运算实现:将运算实现:将k k的低的低4 4位与位与0 0相与,其相与,其他位与他位与1 1相与,即将相与,即将 k k与十六进制的与十六进制的 11101110 相与。相与。程序如下:程序如下:unsignedunsigned int int_set(unsigned_set(unsigned int int k)k)k=k&0 x1110;k=k&0 x1110;return
4、(k);return(k);结论:任何二进制位与结论:任何二进制位与结论:任何二进制位与结论:任何二进制位与0 0相与能实现置相与能实现置相与能实现置相与能实现置0 0,与,与,与,与1 1相与该相与该相与该相与该位保持不变。位保持不变。位保持不变。位保持不变。2 2)按位或按位或按位或按位或 运算经常用与将某些二进制位运算经常用与将某些二进制位 置置置置 1 1。例例12.4:12.4:将一个字节的高将一个字节的高4 4位置为位置为10101010并输出结果。并输出结果。分析:直接用位运算符,可以很方便的置分析:直接用位运算符,可以很方便的置1 1、清、清0 0、翻转等,但、翻转等,但无法直
5、接实现置给定的值。可以用两步实现:首先将高无法直接实现置给定的值。可以用两步实现:首先将高4 4位位清清0 0,然后与,然后与1010000010100000相或。程序如下:相或。程序如下:/*/*设设设设 a a 为待处理的数据,转换成二进制为为待处理的数据,转换成二进制为为待处理的数据,转换成二进制为为待处理的数据,转换成二进制为0000100000001000,b b用来保存将用来保存将用来保存将用来保存将a a的高的高的高的高4 4位清位清位清位清0 0后的结果后的结果后的结果后的结果*/*/main()main()unsigned char a,b,c;a=8;unsigned ch
6、ar a,b,c;a=8;b=b=a&0 x0fa&0 x0f;c=;c=b|0 xa0b|0 xa0;/*c;/*c用于保存最终结果用于保存最终结果用于保存最终结果用于保存最终结果*/*/printf(printf(%x%x,c);,c);运行结果:运行结果:10101000101010003 3)按位异或运算经常用与将某些位翻转。按位异或运算经常用与将某些位翻转。按位异或运算经常用与将某些位翻转。按位异或运算经常用与将某些位翻转。例例12.512.5编程实现编程实现,将一整数将一整数n n的高的高8 8位翻转,低位翻转,低8 8位不变位不变分析:用分析:用“异或异或”运算实现,即高运算实现
7、,即高8 8位与位与1 1相异或,低相异或,低8 8位与位与0 0相异或,也就是相异或,也就是k k与十六进制的与十六进制的与十六进制的与十六进制的ff00ff00相异或。程序如下:相异或。程序如下:main()main()int n=129;int n=129;printf(printf(n before reset,n=%xn before reset,n=%x,n);,n);n=nn=n0 xff00;0 xff00;printf(printf(n after reset,n=%xn after reset,n=%x,n);,n);运行结果:运行结果:before reset,n=000
8、00000 10000001before reset,n=00000000 10000001after reset,n=11111111 10000001after reset,n=11111111 10000001 结论:任何二进制位与结论:任何二进制位与结论:任何二进制位与结论:任何二进制位与0 0异或,保持不变;与异或,保持不变;与异或,保持不变;与异或,保持不变;与1 1异或,对应位异或,对应位异或,对应位异或,对应位翻转。翻转。翻转。翻转。4)4)左移、右移运算实现将一个数的各个二进制位向左、向左移、右移运算实现将一个数的各个二进制位向左、向右移若干位。右移若干位。左移:将一个数的各
9、个二进制位左移若干位,高位左移左移:将一个数的各个二进制位左移若干位,高位左移左移:将一个数的各个二进制位左移若干位,高位左移左移:将一个数的各个二进制位左移若干位,高位左移后舍弃,低位补后舍弃,低位补后舍弃,低位补后舍弃,低位补0 0。若定义若定义若定义若定义:int a=8;int a=8;即即即即a=a=0000 10000000 1000 ,则语句则语句则语句则语句a=a2a=a2 a=a2;将将将将 a a 的各二进制位右移的各二进制位右移的各二进制位右移的各二进制位右移 2 2 位,空出的位,空出的位,空出的位,空出的高位补高位补高位补高位补 0 0。结果为。结果为。结果为。结果为
10、:0000 00100000 0010 12.2位段 1.1.位段的概念位段的概念以以位位位位为单位定义其长度的为单位定义其长度的结构体成员结构体成员。2 2位段的定义位段的定义例例12.612.6若某个控制字长若某个控制字长3232位,分位,分5 5段,每段的长度分别为:段,每段的长度分别为:2 2,6 6,4 4,4 4,1616位位;每段存放一个信息,且第;每段存放一个信息,且第4 4段空段空出不用。可用如下结构体类型描述:出不用。可用如下结构体类型描述:struct con_wordstruct con_word unsigned a:2;/*unsigned a:2;/*位段位段位段
11、位段a a,长度为,长度为,长度为,长度为2*/2*/unsigned b:6;/*a,b,c unsigned b:6;/*a,b,c为有名位段为有名位段为有名位段为有名位段*/*/unsigned c:4;unsigned c:4;unsigned :4;/*unsigned :4;/*该位段为无名位段,表示这该位段为无名位段,表示这该位段为无名位段,表示这该位段为无名位段,表示这4 4位空间位空间位空间位空间空出不使用空出不使用空出不使用空出不使用*/*/int i;int i;data;data;n n变量变量datadata的存储结构如图的存储结构如图:n nabciabci成员名成
12、员名n n264416264416长度长度 3 3位段的引用位段的引用位段的引用位段的引用 位段是结构体类型的某个成员,因此,位段的引用同结构体成位段是结构体类型的某个成员,因此,位段的引用同结构体成位段是结构体类型的某个成员,因此,位段的引用同结构体成位段是结构体类型的某个成员,因此,位段的引用同结构体成员的引用方法相同。员的引用方法相同。员的引用方法相同。员的引用方法相同。如:如:如:如:data.a=0 x01;data.a=0 x01;/*/*给位段给位段给位段给位段a a赋值,赋值,赋值,赋值,*/*/data.b=0 x0a;data.b=0 x0a;/*/*给位段给位段给位段给位
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Clanguage 12 运算
限制150内