《第十章 位运算 - 山东外贸职业学院.ppt》由会员分享,可在线阅读,更多相关《第十章 位运算 - 山东外贸职业学院.ppt(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第十二章 位运算引言位运算是对操作数以二进制位(bit)为单位进行的数据处理。C语言中,位运算包括逻辑位运算和移位位运算。参加位运算的操作数必须是整型常量或变量。一、逻辑位运算逻辑位运算分为四种:位反、位与、位或、位异或。运算符 功能举例按位取反 5=2 (即101=010)&按位与5&6=4(即101&110=100)|按位或5|4=5(即101&100=101)按位异或 56=3(即101&110=011)练习:设以下各数均用一个字节表示(4位)求:6,5&4,5|6,54。在逻辑位运算中,的优先级高于算术运算符、关系运算符、逻辑运算符和其他运算符,其他运算符则低于关系运算符、高于逻辑运算
2、符。一、逻辑位运算设有如下定义:int a;则:1、a&a=a;a&255=a;2、a|a=a;a|0=0;3、aa=0;a255=a;a0=a;4、使特定位取反:令ab,其中b为:要取反位为1,其他各位为0。例如:让a的35位取反:令a00011100二、移位运算移位运算分为两种:左移和右移运算符功能举例左移00010100右移000101002=000001011、左移运算当进行左移运算时,右端出现的空位补0,而左端移出的数据舍去。例如:c=44(00101100)进行下面的操作:c=c1;c的值变为88(01011000)c=c1;a的值变为-8(11111000)b=b1;b的值变为1
3、20(01111000)a=a1;a的值变为-4(11111100)b=b1;b的值变为60(00111100)每右移一位,相当于原数除以2,右移n位,相当于原数除以2n。同为11110000。应用:要取a中的某几位:设a=00101101;如要取a的25位:000011001、令a&00011110;说明:移位运算比乘、除法的运算速度快。移位运算的优先级低于算术运算,高于关系运算。位运算、移位运算可以与赋值运算组成符合赋值运算符。其优先级等价于赋值运算。例如:a=a&b;可写成a&=b;a=a|b;可写成a|=b;a=ab;可写成a=b;a=a2;可写成a=2;a=a2;可写成a=2;练习:
4、1、设int b=2;表达式(b1)的值是(8)。2、以下程序的输出结果是(100)main()int x=040;printf(“%o”,x1);3、已知:int x=5,y=3;求下列表达式的值:!x x x&y x&y x|y x|y xy pow(x,y)位运算应用举例位运算应用举例10010011010101110111100100110101移位前移位前循环右移循环右移4位后位后左移左移12位后得位后得b0111000000000000右移右移4位后得位后得c0000100100110101b与与c相或得最后结果。见程序相或得最后结果。见程序D12_2.c将变量将变量a a右循环移
5、动右循环移动n n位,假定位,假定n n为为4 4,其图示如下:,其图示如下:作业作业1 1、编程,实现左循环移位编程,实现左循环移位2 2、page 329 12.4 page 329 12.4 题题3 3、page 329 12.1page 329 12.1题题12.3 位段位段c语言中允许在结构体中以位为单位来指定其成员语言中允许在结构体中以位为单位来指定其成员所占的内存长度,这种以位为单位的成员就称为所占的内存长度,这种以位为单位的成员就称为位段位段或或位域。其定义方式如下类似:位域。其定义方式如下类似:struct wdunsigned a:2;unsigned b:3;unsign
6、ed c:6;unsigned d:4;int k;dat;定义一种结构体类型定义一种结构体类型struct wd,且同时定义该类型的一个变且同时定义该类型的一个变量量dat。其中其中a、b、c、d分别分别是位段,它们分别占是位段,它们分别占2、3、6、4个位,个位,k是的一般成员,是的一般成员,k占占2个字节个字节上面的结构体变量上面的结构体变量dat中的成员安排如下:中的成员安排如下:abcdk对结构体变量对结构体变量dat中各个成员的使用和前面讲解中各个成员的使用和前面讲解一致。只是需要注意:位段成员值的范围,只能一致。只是需要注意:位段成员值的范围,只能为非负整数,且不能超过它们所能表示的最大值。为非负整数,且不能超过它们所能表示的最大值。由此判断下面的赋值是否正确?由此判断下面的赋值是否正确?dat.a=3;dat.b=9;dat.c=64;dat.d=0;dat.k=-9876;位段使用中的其它注意事项见课本。位段使用中的其它注意事项见课本。