c语言程序设计--位运算ppt课件

上传人:bin****86 文档编号:54789006 上传时间:2018-09-19 格式:PPT 页数:29 大小:113.50KB
返回 下载 相关 举报
c语言程序设计--位运算ppt课件_第1页
第1页 / 共29页
c语言程序设计--位运算ppt课件_第2页
第2页 / 共29页
c语言程序设计--位运算ppt课件_第3页
第3页 / 共29页
c语言程序设计--位运算ppt课件_第4页
第4页 / 共29页
c语言程序设计--位运算ppt课件_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《c语言程序设计--位运算ppt课件》由会员分享,可在线阅读,更多相关《c语言程序设计--位运算ppt课件(29页珍藏版)》请在金锄头文库上搜索。

1、语言程序设计,第十二章 位运算,2004,12.1 概述位运算: 是指进行二进制位的运算。 一、字节与位 位(Bit): 二进制位是计算机中最小的信息单位。一位 二进制能表达两个信息“0”和“1”。2位二进制能表达4个信息: 00 01 10 114位二进制能表达8个信息: 000 001 010 011 100 101 110 111 8位二进制能表达256个信息:0000,0000 . 1111,1111n位二进制能表达 个信息。,12.2 位运算 C语言提供的位运算符: & 按位与 | 按位或 按位异或 取反 右移 说明: 1、位运算符中除了以外,均为二目运算符。 2、运算量只能是整型或

2、字符型的数据,不能为实型数据。,一、“按位与”运算符: 规则: 参加运算的两个运算量,如果两个相应位都为1, 则该 位结果值为1,否则为0。 例如: X=10001001 Y=11101110 X & Y=10001000,按位与的特殊用途: 1、清零。 方法: 与一个各位都为零的数值相与,结果为零。,2、取一个数x中某些指定位。 方法: 找一个数,此数的各位是这样取值的:对应x数要取各位,该数对应位为1,其余位为零。此数与x相就可以得到x中的某些位。 例:设X=10101110 (1)取X的低4位,(2)取X的bit2、bit4、bit6位,二、“按位或”运算符 规则: 参加运算的两个运算量

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

4、应x数要转的各位,该数对应位为1,其余位为零。此数与x相或即可。 例:x=10101110, 使x低4位翻转,(2)与0相异或,保留原值。 例:,四、“取反”运算符 对一个二进制数按位取反,即将0变为1,1变为0。 例: 0100001110010111 取反 1011110001101000 注意:运算符的优先级别比算术运算符、关系运算符、逻辑运符和其它运算符都高。 例:使一个数a的最低位为零,可以表示成:a & 1 因为,1=1111111111111110。,五、左移运算符 将一个数的各二进制全部左移若干位。(左丢弃,右补0) 例:a=a2 将a的二进制数右移2位。 将一操作数左移一位,

5、相当于将其乘2。将一操作数右移一位,相当于将其除以2。因此,可以用移位操作代替部分乘除操作,只要不产生溢出,这种代替是正确的。,七、位运算符与赋值运算符结合,组成展的赋值运算符。 &=, 例:a&=b 相当于 a=a&b |=, 例:a|=b 相当于 a=a|b =, 例:a =b 相当于 a=ab =, 例:a=b 相当于 a=a4 (2)设置一个低4位全为1,其余为0 的数 (0 0111101111110101 注意,不能直接使用运算符,因为,运算符使左面 添0或添1。 算法:设需要循环右移的数是一个整数(两字节)。移动n 位,(1)将a的右端n位先放到中间变量b的高n位中。 (左移16

6、-n位) b= an;,(3)将c与b 进行按位或运算。 c=a | b 程序: main() unsigned a,b,c; int n; scanf(“a=%o,n=%d“, ,12.4 位段 信息可以用用1字节、2字节、4字节、8字节表示。例如,用1字节表示一个英文字符,2字节表示一个汉字字符,4字节表示一个实数,等。 某些信息可以用一位二进制表达,如:打印机状态: bit0: 打印机在规定的时间内未完成上一次指定的操作。 bit5: 打印机当前缺纸。 bit7: 打印机当前准备好。,某些信息也可以用几位二进制表达。例如,数学协处理器的控制寄存器,有如下结构:BIT5BIT0:异常屏蔽位

7、。置0时把相应的异常传送给CPU的异常处理程序,置1时把相应的异常传送给协处理器的异常处理程序。 PC:Precision Control,精度控制,指定有效数字的位数(符号位加尾数):00 :24位(短实数) 01:保留 10:53位(长实数) 11:64位(临时实数),RC:Rounding Control,舍入控制 00,舍入到最接近的值(缺省) 01:舍入到负无穷 10:舍入到正无穷 11:截断在语言中,为了方便访问这些信息,定义了“位段“类型,它是用结构体来表示的。,例: struct FPU unsigned :4; /* 无名位段, 占4位 */unsigned RC:2 /*

8、RC位段,占2位 */unsigned PC:2; unsigned :2; /* 无名位段, 占2位 */unsigned PM:1; /* PM位段,占1位 */unsigned UM:1; unsigned OM:1; unsigned ZM:1; unsigned DM:1;unsigned IM:1; ;,例: 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: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);位段的长度不能超出存储单元,也不能定义位段数组,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

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