资源描述:
《第12章 位运算2》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第12章位运算12.1位运算符和位运算12.2位段12.1位运算符和位运算概念位运算是指按二进制位进行的运算。因为在系统软件中,常要处理二进制位的问题。例如:将一个存储单元中的各二进制位左移或右移。12.1位运算符和位运算C语言提供的位运算符有:运算符含义运算符含义&按位与~取反
2、按位或<<左移^按位异或>>右移说明:位运算符中除"~"以外,均为双目运算符。运算量只能是整型或字符型的数据,不能为实型数据。12.1.1“按位与”运算符(&)按位与:按二进制位进行“与”运算。运算规则:0&0=00&1=01&0=01&1=112.1.1“按位与”运算符(&)例如:3&5=?00000011(3)&
3、00000101(5)00000001(1)【例12.1】#includevoidmain(){inta=3,b=5,and;and=a&b;printf("%d",and);getch();}运行结果:112.1.1“按位与”运算符(&)注意:如果参加&运算的是负数,则以补码形式进行“与”运算。应用:清零(即全部二进制位为0)方法:找一个二进制数,满足条件:原来的数中为1的位,新数中相应位为0。然后使二者进行&运算。00101011&1001010000000000应用:取一个数中某些指定位方法:将这个数与1按位与即可。例如:有一个整数(2个字节),想要取其中的低字节。
4、0010110010101100&0000000011111111000000001010110012.1.2“按位或”运算符(
5、)按位与:按二进制位进行“或”运算。运算规则:0
6、0=00
7、1=11
8、0=11
9、1=100110000(060)
10、00001111(017)00111111(077)12.1.2“按位或”运算符(
11、)例如:060
12、017=?【例12.2】#includevoidmain(){inta=060,b=017,or;or=a
13、b;printf("%o",or);}运行结果:77应用:常用来对一个数据的某些位定值为1。例如:想使一个数的低4位改为1,只
14、需将这个数与017进行“按位或”运算即可。00110000(060)
15、00001111(017)00111111(077)12.1.3“异或”运算符(^)“异或”判断两个相应的位值是否为“异”(不同),为“异”就取真(1);否则,为假(0)。运算规则:0^0=00^1=11^0=11^1=012.1.3“异或”运算符(^)例如:071^052=?00110000(071)^00001111(052)00111111(023)【例12.3】#includevoidmain(){inta=071,b=052,xor;xor=a^b;printf("%o",xor);}运行结果
16、:23应用:使特定位翻转要使哪几位翻转就将相应位与1进行“^运算”。例如:设有01111010,想使其低4位翻转。01111010^0000111101110101应用:与0相^,保留原值因为原数中的1与0进行^运算得1,0^0得0,故保留原数。例如:012^00=01200001010(012)^00000000(00)00001010(012)应用:交换两个值,不用临时变量例如:a=3,b=4,想将a和b的值互换,可以用以下赋值语句实现:a=a^b;b=b^a;a=a^b;011(3)a^100(4)b111(7)a111(7)a^100(4)b011(3)b111(7)a^011(3)b
17、100(4)a12.1.4“取反”运算符(~)~是一个单目运算符,用来对一个二进制数按位取反,即将0变1,将1变0。运算规则:~0=1~1=012.1.4“取反”运算符(~)例如:~025=?0000000000010101(025)~1111111111101010(0177752)12.1.5左移运算符(<<)左移运算符:是用来将一个数的各二进制位全部左移若干位,右补0。例如:a=15;a=a<<2;//将a的二进制数左移2位00001111001111001560说明:高位左移后溢出,舍弃。左移一位,相当于该数乘以2。左移n位,相当于该数乘以2n。只适用于该数左移时被溢出舍弃的高位中不包
18、含1的情况。12.1.6右移运算符(>>)右移运算符:将一个数的二进制位右移若干位,移到右端的低位被舍弃,对无符号数,高位补0。例如:a=017;a=a>>2;0000111100000011153说明:右移一位相当于除以2,右移n位相当于除以2n。在右移时,需要注意符号位问题。对无符号数,左边高位补0;对于有符号数,左边补0还是1,要取决于所用的计算机系统。TurboC采用“算术右移”的方法:左