【教学课件】第十二章位运算.ppt
第十二章 位运算,掌握位运算的概念和方法,学会使用位运算符;学会通过位运算实现对某些位的操作;了解位段的概念以及位段的定义和引用。,12.1 相关概念,1.位(bit):是指二进制中的位,它是计算机能 处理的最小单位。,2.字节(byte):是计算机处理的基本单位。计算 机的内存是按字节进行分配的。一个字 节有八位二进制数组成。所以我们在C语 言中数据类型都是以字节为基本单元。,3.补码:一个正数的补码是其本身;一个负数的 补码是其绝对值按位取反后加1。计算 机是以补码的形式存放数的。,例如:-7 的补码是 1111 1111 1111 1001,12.2 位运算和位运算符,一、位运算的概念,位运算:以二进制位为单位的运算。,二、位运算符,“位运算”仅 限于整数(整型数和字符型)。,1.位逻辑运算符,(按位求反)、&(按位与)、(按位异或)、|(按位或),运算规则:,1=0 0=10&0=0 0&1=0 1&0=0 1&1=100=0 01=1 10=1 11=00|0=0 0|1=1 1|0=1 1|1=1,例如:main()unsigned char a,b;a=0 x9d;b=0 xa5;printf(“a:%xn”,a);printf(“a,输出结果:a:a&b:a|b:ab:,62,85,bd,38,位逻辑运算符的应用:,&运算符的应用:与0相&,清0;与1相&,取指定位。,|运算符的应用:与1相|,可对某些位定值为1。,运算符的应用:与1相,使特定位翻转;,2.位移位运算符,(按位右移),运算规则:,移位时,移出的位数全部丢失,移出的空位补入的数与左移还是右移有关。,左移补入的数全都是0,例如:unsigned a=3;a1的十进制值是:,12,1,3位复合赋值运算符,由位运算符与赋值运算符组成。,&=、|=、=、=,例如:a&=b相当于a=a&b a2相当于 a=a2,三、位运算符的优先级,位运算符自身的优先级为(从高到低):,、()、&、|,位运算符与其他运算符相比较优先级为(从高到低):,、算术运算符、()、关系运算符、&、|、逻辑运算符、条件运算符、赋值(复合赋值)运算符、逗号运算符,例如:char a=9,b=020;printf(“%on”,a,输出结果:40,12.3 位段,位段:在一个结构体中可以以位为单位来指定 其成员所占内存长度,这种以位为单位 的成员称为位段(或位域)。,如:struct packed_data unsigned a:2;unsigned b:3;unsigned c:4;int i;data;,位段的引用:,结构体变量名.位段成员名,如:struct packed_data unsigned a:2;unsigned b:3;unsigned c:4;int i;data;,位段的引用如下:data.a=2;data.b=7;data.c=9;,注意:位段允许的最大值范围。,data.a=9;,说明:,位段成员的类型必须指定为unsigned int类型。,允许在位段中定义无名字段,其含义为跳过该 字节剩余的位或指定的位不用。当无名字长度 为0时,跳过该字节剩余的位不用;当无名字段 长度为n时,跳过n位不用。,如:struct packed_data unsigned a:2;unsigned b:3;unsigned:0;unsigned c:4;int i;data;,又如:struct packed_data unsigned a:2;unsigned b:3;unsigned:2;unsigned c:4;int i;data;,位段的长度不能大于存储单元的长度。即16位,不能定义位段数组。,位段可以在数值表达式中引用,也可以用整型格 式输出。,