欢迎来到天天文库
浏览记录
ID:43916678
大小:1.20 MB
页数:18页
时间:2019-10-16
《C语言程序设计 第十一章 位运算》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、甘肃工业职业技术学院信息工程系2009年12月C语言程序设计张燎第十一章位运算§位运算符和位运算§位运算举例§位段§11.1位运算符和位运算C语言提供了六种位运算符:&按位与~取反
2、按位或<<左移^按位异或>>右移说明:(1)位运算符除~以外,均为二目运算,即要求两侧各有一个运算量。(2)运算量只能是整型或字符型的数据,不能为实型数据。11.1.1“按位与”运算符(&)功能:对参与运算的两数各对应的二进位相与。只有对应的两个二进制位均为1时,结果位才为1,否则为0。即0&0=0,0&1=0,1&0=0,1&1=1参与运算的数以补码方式出现。例如3&5,应该
3、按位与:00000011(3)(&)00000101(5)00000001(1)按位与的特殊用途:◆某些位清零◆保留某些位◆取一个数中某些指定位例如:把a的高八位清0,保留低八位。可作a&255运算0010110010101100(&)00000000111111110000000010101100把一个数01010100的左面第3、4、5、7、8位保留下来。01010100(&)0011101100010000原来数中为1的位,新数中相应位为0原来数要保留的位,新数中相应位为111.1.2“按位或”运算符(
4、)功能:对参与运算的两数各对应的二进位
5、相或。只要对应的两个二进制位有一个为1时,结果位就为1。即0
6、0=0,0
7、1=1,1
8、0=1,1
9、1=1例如:9
10、5可写算式如下:00001001(9)(
11、)00000101(5)00001101(13)可见9
12、5=13按位或运算常用来对一个数据的某些位定值位1。11.1.3“异或”运算符(^)功能:对参与运算的两数各对应的二进位相异或。当对应的两个二进制位相异时,结果位就为1。即0∧0=0,0∧1=1,1∧0=1,1∧1=0例如:9∧5可写算式如下:00001001(9)(∧)00000101(5)00001100(12)可见9∧5=12“异或”的意思是
13、判断两个相应的位值是否为“异”,为“异”就取真(1),否则为假(0)。举例说明∧运算符的应用★使特定位翻转假设有0111010,想使其低4位翻转,即1变为0,0变为1。01111010(∧)0000111101110101要想使哪几位翻转,就将与其进行∧运算的该几位置为1即可。★与0相∧,保留原值01111010(∧)0000000001111010举例说明∧运算符的应用★交换两个值,不用临时变量假如a=3,b=4,想将a和b的值互换,可以用以下赋值语句实现:a=a∧b;b=b∧a;a=a∧b;用竖式来说明:a=011(3)(∧)b=100(4)a
14、=111(∧)b=100b=011(3)(∧)a=111a=100(4)11.1.4“取反”运算符(~)功能:对参与运算的数的各二进位按位取反。取反运算符为单目运算符,具有右结合性。例如:~9的运算为:~(0000000000001001)结果为1111111111110110~运算符的优先级高于算数运算符、关系运算符、逻辑运算符、和其他位运算符都高。例如:b&~a,要先进行~a运算,然后进行&运算。例:a的值6412711.1.5左移运算符(<<)功能:用来将一个数的各二进位全部左移若干位。高位左移后溢出,舍弃。低位补0。a的二进制形式0100000
15、001111111a<<11000000011111110a<<20000000011111100左移一位相当于该数乘以2注意此种结论只适用于该数左移时被溢出舍弃的高位中不包含1的情况。11.1.6右移运算符(>>)功能:用来将一个数的各二进位全部右移若干位。右移时,需要注意符号位问题。对于无符号数,右移时左边高位移入0。对于有符号数,如果原来符号位为0(该数为正),则左边也是移入0。如果原来符号位为1(即负数),则左边移入0还是1,要取决于所用的计算机系统。移入0的称为“逻辑右移”移入1的称为“算术右移”例如:a:1001011111101101(用二进
16、制形式表示)a>>1:0100101111110110(逻辑右移时)a>>1:1100101111110110(算术右移时)右移一位相当于该数除以2,右移n位相当于除以2n。§11.2位运算举例例12.1取一个整数a从右端开始的4~7位。(1)先使a右移4位,目的是使要取出的那几位移到最右端。08743(a)15043(b)15右移到右端可以用a>>4来实现。(2)设置一个低4位全为1,其余全为0的数。可以用~(~0<<4)来实现。0:0000…000000~0:1111…111111~0<<4:1111…110000~(~0<<4):0000…001
17、111(3)将上面的(1)、(2)进行&运算。(a>>4)&~(~
此文档下载收益归作者所有