欢迎来到天天文库
浏览记录
ID:43162411
大小:116.00 KB
页数:11页
时间:2019-10-01
《康辉C语言视频教程9》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第9章位运算9.1位及位运算的概念位运算:二进制位的运算。在内存中每一个字节有一个地址。一个字节由8位二进制位组成。位操作是直接对二进制位进行的,位运算只适用于无符号整型变量。01111101最低位最高位9.2位运算符C语言提供如下位运算符。其中除运算符~以外。都是二目运算符。运算符语义&按位与|按位或∧按位异或~按位取反<<左移>>右移1.按位“与”运算符&参加运算的两个运算量,如果对应二进制位都是1,则该位的结果为1,否则该位是0。例:用按位与操作实现宏is_odd,它判断某个整数是否为
2、奇数:#defineis_odd(x)(1&(unsigned)(x))也可以用按位与运算屏蔽掉某些二进制位,如:c=n&01779.2位运算符2.按位“或”运算符
3、参与运算的两个运算量,如果对应二进制位都是0,则该位的结果值为0,否则该位的结果值是1。按位或运算用来对一个数据的某些二进制位置1。例如:x
4、MASK的运算结果是将x中相应于MASK为1的那些位置1。9.2位运算符3.按位“异或”运算符∧按位异或运算是使参与运算的两个量,如果对应二进制位不同,则该位结果是1,否则该位的结果是0。
5、按位异或操作可以用来检查两个字是否相同。例如:if(x∧y)…/*x和y不同*/9.2位运算符4.按位“取反”运算符~~是单目运算符,用来对一个二进制数按位取反,即将0变为1,将1变成0。这个操作可用于某些依赖于具体计算机字长的应用中,从而使结果代码是可移植的。例如:用来将字x的低3位清零:x=x&0xfff8;但这个操作只能应用于16位字长的计算机。如果计算机的字长为32位,结果将会有所不同。一个可移植的方法是:x=x
6、~0x7;这种表达方式与机器字长无关,也无需额外开销,因为~0x7是个常量
7、表达式,所以是在编译时求值的。9.2位运算符5.左移运算符<>x>>n:把x的每一个二进制位右移n位,丢掉最右边的n位,最左边的n位补0。右移一位相当于将该数除以2。对于负整数,高位补1。9.2位运算符7.位运算符与赋值运算符结合可以组成复合的赋值运算符,这样的运算符有:&=、
8、=、>>=、<<=和^=a&=b相当于a=a&ba
9、=b相当于a=a
10、ba>>=b相当于
11、a=a>>ba<<=b相当于a=a<12、#defineBITSinCHAR8getbits(x,p,n)unsignedx,p,n;{if(p<013、14、p>=sizeof(x)*BITSinCHAR)return(ERROR);return((x>>(p+1-n))&~(~0<15、AR-n);c=a>>n;c16、=b;printf(“%o%o”,a,c);}9.2位运算符
12、#defineBITSinCHAR8getbits(x,p,n)unsignedx,p,n;{if(p<0
13、
14、p>=sizeof(x)*BITSinCHAR)return(ERROR);return((x>>(p+1-n))&~(~0<15、AR-n);c=a>>n;c16、=b;printf(“%o%o”,a,c);}9.2位运算符
15、AR-n);c=a>>n;c
16、=b;printf(“%o%o”,a,c);}9.2位运算符
此文档下载收益归作者所有