资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第十二章 位运算,位运算符和位运算,位运算举例,位段,第一节 位运算符和位运算,六种位运算符,&按位与,|按位或,按位异或,取反,右移,第一节 位运算符和位运算,说明:,位运算符中除,以外,均为二目(元)运算符,即要求两侧各有一个运算量,运算量只能是整型或字符型的数据,不能为实型数据,第一节 位运算符和位运算,一、,按位与运算,只有参与运算的两个二进位均为1时,结果位才为1,否则为0,参与运算的数以补码方式出现,0&0=00&1=01&0=01&1=1,第一节 位运算符和位运算,例如:,9&5可写算式如下:,00001001(9的二进制补码),&00000101(5的二进制补码),00000001(1,的二进制补码,),第一节 位运算符和位运算,特殊用途:,1.清零,找一个二进制数使其所有原来的数中为1的位都为0即可,然后作&运算,例如:,&10010100,00000000,00101011,第一节 位运算符和位运算,2.取一个数中的某些指定位,找一个二进制数使其所有原来的数中要保留的位为1,其他位为0即可,例如:,00101101,&00001111,00001101,第一节 位运算符和位运算,3.要保留哪一位就与一个只有在该位取1的二进制数作&,例如:,01001011,&00001000(保留第4位),00001000,第一节 位运算符和位运算,二、按位或运算,只要参与运算的二个二进位有一个为,1,时,结果位就为,1,,参与运算的两个数均以补码出现,0|0=00|1=11|0=11|1=1,第一节 位运算符和位运算,例如:,9|5可写算式如下:,00001001,|00000101,00001101(十进制为13),第一节 位运算符和位运算,三、,按位异或运算,参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为,1,,参与运算数仍以补码出现,相同为0,不同为1,00=001=110=111=0,第一节 位运算符和位运算,例如:,95可写成算式如下:,00001001,00000101,00001100(,十进制为,12),第一节 位运算符和位运算,特殊用途:,1.使特定位翻转,例如:,01111010,00001111,01110101(低4位翻转),第一节 位运算符和位运算,2.与0相,保留原值,例如:,01200=012,00001010,00000000,00001010,第一节 位运算符和位运算,2.交换两个值,不用临时变量,使用如下语句:,a=,ab,;,b=,ba,;,a=,ab,;,第一节 位运算符和位运算,四、,取反运算,对参与运算的数的各二进位按位求反,例如:,00101011,11010100,注意:的运算优先级比其他的都高,第一节 位运算符和位运算,五、,左移运算,把,“”,左边的运算数的各二进位全部左移若干位,由,“”,右边的数指定移动的位数,高位丢弃,低位补,0,第一节 位运算符和位运算,例如:,a=,00000011(,十进制,3,),a”,左边的运算数的各二进位全部右移若干位,,“”,右边的数指定移动的位数,,,对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补,0,,而为负数时,符号位为,1,,最高位是补,0,或是补,1,取决于编译系统的规定。,Turbo C,和很多系统规定为补,1,第一节 位运算符和位运算,例如:,a=,000001111(,十进制,15,),a,2,a=00000011,(,十进制,3,),第二节 位运算举例,取一个整数,a,从右端开始的47位,main(),unsigned a,b,c,d,;,scanf(“%o”,&a,);,b=aa;,c=(0=,=,等,利用位运算可以完成汇编语言的某些功能,如置位,位清零,移位等。还可进行数据的压缩存储和并行运算,小结,位域在本质上也是,结构类型,,不过它的成员按二进制位分配内存。其定义、说明及使用的方式都与结构相同,位域提供了一种手段,使得可在高级语言中实现数据的压缩,节省了存储空间,同时也提高了程序的效率,
展开阅读全文