第十二章 位运算

上传人:壹****1 文档编号:569478018 上传时间:2024-07-29 格式:PPT 页数:24 大小:93.50KB
返回 下载 相关 举报
第十二章 位运算_第1页
第1页 / 共24页
第十二章 位运算_第2页
第2页 / 共24页
第十二章 位运算_第3页
第3页 / 共24页
第十二章 位运算_第4页
第4页 / 共24页
第十二章 位运算_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《第十二章 位运算》由会员分享,可在线阅读,更多相关《第十二章 位运算(24页珍藏版)》请在金锄头文库上搜索。

1、第第12章章 位运算位运算 12.1位运算符和位运算位运算符和位运算12.2位运算举例位运算举例12.3 位段位段位运算位运算: 是指进行二进制是指进行二进制位位的运算。的运算。 12.1位运算符和位运算位运算符和位运算C C语言提供的位运算符:语言提供的位运算符: & 按位与按位与 | 按位或按位或 按位异或按位异或 取反取反 右移右移 说明:说明: 1、 位运算符中除了位运算符中除了以外,均为二目运算符。以外,均为二目运算符。 2、运算量只能是整型或字符型的数据,不能为实、运算量只能是整型或字符型的数据,不能为实型数据。型数据。一、一、“按位与按位与”运算符(运算符(&)&): 规则:参加

2、运算的两个运算量,如果两个相应位都为1, 则该位结果值为1,否则为0。 例如: X=10001001 Y=11101110 X & Y=10001000 X & Y=10001000 按位与的特殊用途:按位与的特殊用途: 1、清零。、清零。 方法:方法: 与一个各位都为零的数值相与,结果为零。与一个各位都为零的数值相与,结果为零。 2、取一个数、取一个数x中某些指定位。中某些指定位。方法:方法: 找一个数,此数的各位是这样取值的:对应找一个数,此数的各位是这样取值的:对应x数要取各位,该数对应位为数要取各位,该数对应位为1,其余位为零。此数与,其余位为零。此数与x相就可以得到相就可以得到x中的

3、某些位。中的某些位。 例:设例:设X=10101110 (1)取取X的低的低4位位 (2)(2)取取X X的的bit2bit2、bit4bit4、bit6bit6位位 二、“按位或”运算符规则:参加运算的两个运算量,如果两个相应位中有个为1,则该位结果值为1,否则为0。 例如 X=10001001 Y=11101110X | Y=11101111 X | Y=11101111 按位或的特殊用途: 常用来对一个数据的某些位置1。 方法:找一个数,此数的各位是这样取值的,对应x数要置1的位,该数对应位为1,其余位为零。此数与x相或就可使x中的某些位置1。例:使 x=10100000 的低4位为1。

4、三、三、“异或异或”运算符运算符规则:参加运算的两个运算量,如果两个相规则:参加运算的两个运算量,如果两个相应位为应位为“异异” (值不同),则该位结果值(值不同),则该位结果值为为1,否则为,否则为0。 例如例如 X=10001001 Y=11101110XY=01100111 XY=01100111 异或运算的应用:异或运算的应用: (1)使使特特定定位位翻翻转转: 找找一一个个数数,此此数数的的各各位位是是这这样样取取值值的的:对对应应x数数要要转转的的各各位位,该该数数对对应应位位为为1,其余位为零。此数与,其余位为零。此数与x相或即可。相或即可。例:例:x=10101110, 使使x

5、低低4位翻转位翻转(2)(2)与与0 0相异或,保留原值。例、相异或,保留原值。例、 四、四、“取反取反”运算符运算符 对对一一个个二二进进制制数数按按位位取取反反,即即将将0变变为为1,1变变为为0。 例:例: 0100001110010111 取反取反 1011110001101000注意:注意:运算符的优先级别比算术运算符、关系运算符、运算符的优先级别比算术运算符、关系运算符、逻辑运符和其它运算符都高。逻辑运符和其它运算符都高。例:使一个数例:使一个数a的最低位为零,可以表示成:的最低位为零,可以表示成: a & 1 因为,因为,1=11111111111111101=111111111

6、1111110。 五、左移运算符五、左移运算符将一个数的各二进制全部左移若干位。将一个数的各二进制全部左移若干位。(左丢弃,右补(左丢弃,右补0)例:例:a=a2 将将a的二进制数右移的二进制数右移2位。位。 将一操作数左移一位,相当于将其乘将一操作数左移一位,相当于将其乘2。将一操作数右移一位,相当于将其除以将一操作数右移一位,相当于将其除以2。因此,可以用移位操作代替部分乘除操作,因此,可以用移位操作代替部分乘除操作,只要不产生溢出,这种代替是正确的。只要不产生溢出,这种代替是正确的。(用(用CF标志判别无符号数运算是否溢出,标志判别无符号数运算是否溢出,CF=1CF=1,表示溢出。用表示

7、溢出。用OF标志判别有符号标志判别有符号数运算是否溢出,数运算是否溢出,OF=1,表示溢出)。表示溢出)。 七七、位位运运算算符符与与赋赋值值运运算算符符结结合合,组组成成扩展的赋值运算符。扩展的赋值运算符。 &=, 例:例:a&=b 相当于相当于 a=a&b |=, 例:例:a|=b 相当于相当于 a=a|b =, 例:例:a =b 相当于相当于 a=ab =, 例:例:a=b 相当于相当于 a=a4 (2)设置一个低设置一个低4位全为位全为1,其余为,其余为0 的数的数 (0 4; c = (0 0111101111110101注意,不能直接使用注意,不能直接使用运算符,因为,运算符,因为

8、,运算符运算符使左面添使左面添0或添或添1。 算法:设需要循环右移的数是一个整数算法:设需要循环右移的数是一个整数(两字节两字节)。移动移动n位位 (1)将)将a的右端的右端n位先放到中间变量位先放到中间变量b的高的高n位中。位中。 (左移左移16-n位位) b= an; c=an; (3)将)将c与与b 进行按位或运算。进行按位或运算。 c=a | b 程序:程序: main() main() unsigned a,b,c; unsigned a,b,c; int int n; n; scanf scanf(a=%o,n=%d,&a,&n); (a=%o,n=%d,&a,&n); b=a(1

9、6-n); b=an c=an; c=c|b; printf(“%on%o”,a,c); 12.3 位段位段语言允许在一个结构体中以位为单位来指定其成语言允许在一个结构体中以位为单位来指定其成员所占内存,这种以位为单位的成员员所占内存,这种以位为单位的成员 称为称为“位段位段”或称或称“位域位域”。利用位段能用较少的位数来存储数。利用位段能用较少的位数来存储数据。据。 例、例、struct packed_data unsigned a:2; unsigned b:6; unsigned c:4; unsigned d:4; int i; data例、各个位段可以不恰好占满一个字节例、各个位段可

10、以不恰好占满一个字节 struct packed_data unsigned a:2; unsigned b:3; unsigned c:4; int i; data 位段的引用:位段的引用:如,在例中,可以给位段赋值,如,在例中,可以给位段赋值, data.a = 2; /* 注意,位段注意,位段a占占2位,允许位,允许值的范围是值的范围是03 */ data.b = 7; /* 注意,位段注意,位段b占占3位,允许位,允许值的范围是值的范围是07 */ data.c = 9; /* 注意,位段注意,位段c占占4位,允许位,允许值的范围是值的范围是015 */ printf(%d %d %d, data.a, data.b, data.c);本章要求及作业本章要求及作业1、位运算及其特殊用途。、位运算及其特殊用途。2、信息的位段表示。位段数据类型。、信息的位段表示。位段数据类型。作业:作业:12.1

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

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

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