- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《吉大康辉老师讲C语言》第9章: 位运算
第9章 位运算 9.1 位及位运算的概念 位运算:二进制位的运算。 在内存中每一个字节有一个地址。 一个字节由8位二进制位组成。 位操作是直接对二进制位进行的,位运算只适用于无符号整型变量。 9.2 位运算符 C语言提供如下位运算符。其中除运算符~以外。都是二目运算符。 运算符 语义 按位与 | 按位或 ∧ 按位异或 ~ 按位取反 左移 右移 9.2 位运算符 1.按位“与”运算符 参加运算的两个运算量,如果对应二进制位都是1,则该位的结果为1,否则该位是0。 例: 用按位与操作实现宏is_odd,它判断某个整数是否为奇数: #define is_odd(x) (1(unsigned)(x)) 也可以用按位与运算屏蔽掉某些二进制位,如: c=n0177 9.2 位运算符 2.按位“或”运算符| 参与运算的两个运算量,如果对应二进制位都是0,则该位的结果值为0,否则该位的结果值是1。 按位或运算用来对一个数据的某些二进制位置1。 例如: x | MASK 的运算结果是将x中相应于MASK为1的那些位置1。 9.2 位运算符 3.按位“异或”运算符∧ 按位异或运算是使参与运算的两个量,如果对 应二进制位不同,则该位结果是1,否则该位 的结果是0。 按位异或操作可以用来检查两个字是否相同。 例如: if(x∧y) … /* x和y不同*/ 9.2 位运算符 4. 按位“取反”运算符~ ~是单目运算符,用来对一个二进制数按位取反,即将0变为1,将1变成0。 这个操作可用于某些依赖于具体计算机字长的应用中,从而使结果代码是可移植的。 例如: 用来将字x的低3位清零: x=x0xfff8; 但这个操作只能应用于16位字长的计算机。如果计算机的字长为32位,结果将会有所不同。 一个可移植的方法是: x=x|~0x7; 这种表达方式与机器字长无关,也无需额外开销,因为~0x7是个常量表达式,所以是在编译时求值的。 9.2 位运算符 5. 左移运算符 xn: 把x的每个二进制位左移n位,丢掉最左边的n位,右侧补0。 左移1位相当于该数乘以2。 左移比乘法运算快得多。 6. 右移运算符 xn:把x的每一个二进制位右移n位,丢掉最右边的n位,最左边的n位补0。 右移一位相当于将该数除以2。 对于负整数,高位补1。 9.2 位运算符 7. 位运算符与赋值运算符结合可以组成复合的赋值运算符,这样的运算符有:=、|=、=、=和^= a=b 相当于 a=ab a|=b 相当于 a=a|b a=b 相当于 a=ab a=b 相当于 a=ab a^=b 相当于 a=a^b 9.2 位运算符 8. 不同长度的数据进行位运算 如果两个数据长度不同,则在进行位运算时系统会将二者自动按右端对齐。 例如: ab,这里a是long型,b为int型。 如果长度短的数是正数,则左侧用0补满。 如果长度短的数是负数,则左侧用1补满。 在进行运算时,建议采用无符号整数,尽量不用带符号的数。 9.3 位运算举例 [例9.1]设计一个函数,它返回整型量x从右向左数的第p位开始的连续n位所构成的整数值。 #define ERROR (-1) #define BITSinCHAR 8 getbits(x, p, n) unsigned x,p,n; {if(p0 || p=sizeof(x)*BITSinCHAR) return(ERROR); return((x(p+1-n))~(~0n)); } 9.2 位运算符 [ 例9.2]将整型量a循环右移n位。 #define BITSinCHAR 8 main() {unsigned a,b,c; int n; scanf(“a=%o,n=%d”,a,n); b=a(sizeof(a)*BITSinCHAR-n); c=an; c|=b; printf(“%o\n%o”,a,c); } * * 0 1 1 1 1 1 0 1 最低位 最高位
您可能关注的文档
- 《产品研发流程管理细则》GS-11-2017.doc
- 《住宅工程质量通病控制标准》(DGJ32J16-2017.doc
- 《党政机关公文格式》(2017年版).doc
- 《公证与基层法律服务实务》2017年至2017年自考多选题.doc
- 《内河渡口安全管理规定》教学(2017.8 ).ppt
- 《内训师课程开发能力提升》课程方案(2017.2高思研).doc
- 《农村五保供养档案管理办法》.doc
- 《制造计量器具许可考核通用规范》 (JJF1246-2017)宣贯.ppt
- 《单片机技术》实验(2017级自动化卓越1301)讲义.ppt
- 《合同管理》模拟试题2017.doc
- 浙江金华市公共资源交易中心永康市分中心编外人员招考聘用笔试历年典型考题及考点研判与答案详解.docx
- 浙江宁波慈溪市政协办公室招考聘用编外工作人员笔试历年典型考题及考点研判与答案详解.docx
- 浙江金华永康市西溪镇人民政府招考聘用笔试历年典型考题及考点研判与答案详解.docx
- 福建南平市公安局建阳分局招考聘用辅警笔试历年典型考题及考点研判与答案详解.docx
- 浙江嘉兴海盐县武原街道基层残疾人工作专职委员(公益岗位)招考聘用笔试历年典型考题及考点研判与答案详解.docx
- 浙江宁波知识产权保护中心招考聘用工作人员笔试历年典型考题及考点研判与答案详解.docx
- 浙江杭州建德市面向2024届普通高校毕业生招考聘用教师(第二批)16人笔试历年典型考题及考点研判与答案详解.docx
- 浙江省台州中学面向2024届普通高校毕业生招考聘用教师12人笔试历年典型考题及考点研判与答案详解.docx
- 湖北师范大学体育学院专任教师招考聘用笔试历年典型考题及考点研判与答案详解.docx
- 重庆市南岸区教育事业单位面向2024届高校毕业生招考聘用114人笔试历年典型考题及考点研判与答案详解.docx
文档评论(0)