《第十二章位运算.ppt》由会员分享,可在线阅读,更多相关《第十二章位运算.ppt(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第十二章 位运算位运算符与位运算 学习本章基础:2、8、10、16进制数的相互转换位段及其应用 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 012.1 位运算符与位运算 二进制数的位的编号 一、位运算符 位运算符的运算对象是整数(包括带符号整型、无符号整型、字符型)运算规则是对其中每个二进制位上的0、1进行的;运算结果是整数。【注】长度不等的整数进行“位运算”,执行“就长不就短”的转换规则!转换对象若是无符号整数,则在左边加0;若是带符号整数,则在左边加符号位。【例】short a=-1,b=1;unsigned short c=65535;扩展部分 原数据 若转换
2、成long型:a=11111111 11111111 b=00000000 00000000 c=00000000 0000000011111111 1111111100000000 0000000111111111 111111111 1.位逻辑运算符 【注】(1)位运算符的运算规则。(2)位逻辑运算符的优先级如下:算术 关系&|&|。、!、+、-、单目+、-、sizeof()是同级的,结合性自右向左。【例】char a=A;short b=0 x5050,c=0 xA0A0;a=01000001 a=00000000 01000001 b=01010000 01010000 a=10111
3、110 b=01010000 01010000 c=10100000 10100000 a&b=00000000 01000000 b&c=00000000 00000000 a|b=01010000 01010001 b|c=11110000 11110000 ab=01010000 00010001 bc=11110000 11110000名称对象数与位置运算符对象类型运算规则结果类型结合性位非单目前缀整型字符型1为0 0为1整型自右向左位与双目中缀&参看注(1)自左向右按位加位或|aba&ba|bab0000001011100111111022.位移位运算符优先级:算术运算符 位移位运算
4、符 关系运算符【注】移位运算与对象是否带符号有关,具体规则如下:无符号数左移(2n)带符号数左移 .丢弃 0 丢弃 0 .无符号数右移(2n)带符号数右移 .0 丢弃 丢弃 .【例】unsigned short a=12;a=00000000 00001100 黑框:原数 short b=-1;b=11111111 11111111 红框:结果 a3 000 结果是00000000 00000001(1223=1)b3 111 结果是11111111 11111111(-1)名称对象数与位置运算符对象类型运算规则结果类型结合性位左移双目中缀整型字符型XXY X右移Y位00000000 0000
5、110000000000 0000110011111111 1111111111111111 11111111有时正确33.位复合赋值运算符(在3.9节已经见过)优先级:条件运算符 赋值、复合赋值运算符 逗号运算符 所有赋值、复合赋值运算符优先级均相同,结合性自右向左的【例】设有short a=0 xAA55;a&=0 xBBBB a|=0 xBBBB a=0 xBBBB 相当于 a=a&0 xBBBB a=a|0 xBBBB a=a0 xBBBB a=10101010 01010101 a=10101010 01010101 a=10101010 01010101 0 xBBBB=10111
6、011 10111011 10111011 10111011 10111011 10111011 结果a=10101010 00010001 a=10111011 11111111 a=00010001 11101110 a=4 相当于 a=a4 a=10101010 01010101 a=10101010 01010101 结果a=10100101 01010000 结果a=11111010 10100101名称对象数与位置运算符对象类型运算规则结果类型结合 性位与赋值双目中缀&=左边:变量右边:表达式整型、字符型X&=Y 相当于 X=X&(Y)整型或字符型自右向左X|=Y 相当于 X=X|
7、(Y)位或赋值|=位按位加赋值=X=Y 相当于 X=X(Y)位左移赋值=X=Y 相当于 X=X=X=Y 相当于 X=X(Y)412.2 位运算程序设计例【例1】取出带符号短整型数据的47位,组成新的短整型数据。程序:#include stdio.h 算法:a=xxxxxxxx yyyyxxxx void main()运算数:00000000 11110000 short a,b;&结果 00000000 yyyy0000 scanf(%x,&a);右移4位 00000000 0000yyyy b=a&0 x00F0;b=4;printf(%xn,b);【例2】无符号短整型数据循环右移4位。(例
8、如电子屏幕图案变化)程序:#include stdio.h算法:a=xxxxyyyy zzzzmmmm void main()a左移12位 b=mmmm0000 00000000 unsigned short a,b,c,d;a右移4位 c=0000 xxxx yyyyzzzz scanf(%x,&a);b|c d=mmmmxxxx yyyyzzzz b=a4;d=b|c;printf(%xn,d);12.3 位段(节省内存)一、位段的概念 2位 6位 5位 3位 一个数据中的二进制位分成长度相等或不等的若干段,每段称一个位段。【例】5二、位段的定义方法(用结构型)【定义方法】【例】struc
9、t 结构型名 struct p_data a b c d 数据类型名 成员名:位数;unsigned a:8;数据类型名 成员名:位数;unsigned b:2;unsigned c:3;数据类型名 成员名:位数;int d:3;结构型变量名;data1;【注】(1)成员的数据类型只能是unsigned int或int。(2)每个成员占有的所有位必须在一个字节中。struct p_data unsigned x:4;unsigned y:2;x y 空 z int z:8;data2;(3)按照第(2)点分配时,允许有空位。(4)成员不能定义为数组。【位段结构型成员引用方法】【例】结构型变量名.成员名。data1.a(只能存放0255)data1.c(只能存放07)data1.d(只能存放-43)data2.y(只能存放03)【注】成员的引用当成对应类型的普通变量,可以参加运算,以%d、%o、%x、%u格式输出。三、位段的应用 (1)多个小数据可以存放在一个位段变量中,从而节省内存。(2)在控制系统或信息处理中,可能用到某个变量的某几位作为控制信号。本章无习题不考若控制循环的变量i、j=0、1、10;可以定义为int i,j;(需要8字节)也可以定义为位段成员,长度为4;(需要1字节)6