欢迎来到天天文库
浏览记录
ID:50040729
大小:72.00 KB
页数:21页
时间:2020-03-08
《C 程序设计教程 教学课件 作者 戴水贵 敖志刚 俞海英 编著第10章 位运算.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第10章位运算为了节省内存空间,在系统软件中常将多个标志状态简单地组合在一起,存储到一个字节(或字)中。C语言提供了实现将标志状态从标志字节中分离出来的位运算功能。所谓位运算是指按二进制位进行的运算。位运算是针对整型数的。10.1位运算和运算符(1)按位与(逻辑乘)--&格式:x&y运算法则:0&0=00&1=01&0=01&1=1例如,5&10=0(结果为零)0101//5&1010//10-----------------0000//0(结果为零)按位或--
2、格式:x
3、y运算法则:0
4、0=00
5、1=11
6、
7、0=11
8、1=1例如,3
9、9=1(结果为非零)0011//3
10、1001//9---------------1011//11(结果为非零)(3)按位异或^格式:x^y运算法则:0^0=00^1=11^0=11^1=0两个位相同时,结果为0,不同时为1。例如,3^9=1(结果为非零)0011^1001------------1010=10(结果为非零)(4)按位取反--~格式:~x运算法则:~0=1~1=0例1,charch=254;//254=0xFE=11111110~11111110=00000001例2,
11、inta=0x12345678;//00010010001101000101011001111000~a=11101101110010111010100110000111(5)按位左移--<<格式:x<<位数运算法则:操作数的各位左移,低位补0,高位溢出。例如,5<<2=20。00000101<<200010100=0x14=20(6)按位右移-->>格式:x>>位数运算法则:1)无符号数:操作数的各位右移,移出的低位舍弃,高位补0。2)有符号数操作数的各位右移,移出的低位舍弃,高位补0或1(正数补0,负数补
12、1,即符号扩展)。例1,chara=0x14;//0x14=20a>>2=0x14>>2=(00010100)>>2=00000101//5即(20>>2=5)main(){inta=0x80000000;//有符号数,且符号位(最高位)为1printf("%X",a>>2);}/*运行结果:E0000000*/说明:由于是有符号数,且符号位(最高位)为1,所以高位补1。main(){unsignedinta=0x80000000;//无符号数,最高位为1printf("%X",a>>2);}/*运行
13、结果:20000000*/说明:尽管最高位为1,但由于是无符号数,所以高位补0。main(){unsignedchara=0x80;//无符号字符(最高位为1)printf("%X",a>>2);}/*运行结果:20*/main(){chara=0x80;//有符号字符(最高位为1)printf("%X",a>>2);}/*运行结果:FFFFFFE0*/10.2位运算赋值运算符除按位取反运算外,其余5个位运算符均可与赋值运算符一起,构成复合赋值运算符。格式如下:&=、
14、=、^=、<<=、>>=例如:a
15、&=b;//相当于a=a&ba<<=2;//相当于a=a<<210.3程序例例1:输出一个整数num中由8~11位构成的数。(1)使变量num右移8位,将8~11位移到低4位上。(2)构造1个低4位为1、其余各位为0的整数。(3)与num进行按位与运算。0X3E8=1000(十进制)main(){intnum=0x3E8,mask;//0x3E8=(0000001111001000)Bnum>>=8;//右移8位,将8~11位移到低4位上mask=~(~0<<4);//间接构造1个低4位为1、其余各位为0的整
16、数printf("Result=0x%x",num&mask);}/*运行结果:Result=0x3*/例2:按二进制位输出一个整数。#includemain(){intnum=0x3E8,mask,i;//0X3E8=1000mask=1<<15;//构造1个最高位为1、其余各位为0的整数for(i=1;i<=16;i++){putchar(num&mask?'1':'0');//输出最高位的值(1/0)num<<=1;//将次高位移到最高位上if(i%4==0)putchar(',
17、');//四位一组,用逗号分开}printf("bB");}/*运行结果:0000,0011,1110,1000B*/10.4位段有的时候,存储1个信息不必占用1个字节,只需二进制的1个(或多个)位就够用。如果仍然使用结构类型,则造成内存空间的浪费。为此,C语言引入了位段类型。1.位段类型位段类型是一种特殊的结构类型,其所有成员均以二进制位为单位定义长度,并称成员为位段。利用位运算可以完成汇编
此文档下载收益归作者所有