- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第12章 位运算1
第12章 位运算 12.1 位运算符和位运算 12.2 位段 12.1 位运算符和位运算 概念 位运算是指按二进制位进行的运算。因为在系统软件中,常要处理二进制位的问题。 例如: 将一个存储单元中的各二进制位左移或右移。 12.1 位运算符和位运算 C语言提供的位运算符有: 12.1.1 “按位与”运算符() 按位与: 按二进制位进行“与”运算。 运算规则: 12.1.1 “按位与”运算符() 例如: 35 = ? 12.1.1 “按位与”运算符() 注意: 如果参加运算的是负数,则以补码形式进行“与”运算。 应用: 清零(即全部二进制位为0) 方法: 找一个二进制数,满足条件:原来的数中为1的位,新数中相应位为0。然后使二者进行&运算。 应用: 取一个数中某些指定位 方法:将这个数与1按位与即可。 例如:有一个整数(2个字节),想要取其中的低字节。 12.1.2 “按位或”运算符(|) 按位与: 按二进制位进行“或”运算。 运算规则: 12.1.2 “按位或”运算符(|) 例如: 060|017=? 应用: 常用来对一个数据的某些位定值为1。 例如:想使一个数的低4位改为1,只需将这个数与017进行“按位或” 运算即可。 12.1.3 “异或”运算符(^) “异或” 判断两个相应的位值是否为“异”(不同),为“异”就取真(1);否则,为假(0)。 运算规则: 12.1.3 “异或”运算符(^) 例如: 071^052=? 应用: 使特定位翻转 要使哪几位翻转就将相应位与1进行“^ 运算” 。 例如:设想使其低4位翻转。 应用: 与0相^,保留原值 因为原数中的1与0进行^运算得1,0^0得0,故保留原数。 例如: 012^00=012 应用: 交换两个值,不用临时变量 例如:a=3,b=4,想将a和b的值互换,可以用以下赋值语句实现: a = a^b; b = b^a; a = a^b; 12.1.4 “取反”运算符(~) ~是一个单目运算符, 用来对一个二进制数按位取反,即将0变1,将1变0。 运算规则: 12.1.4 “取反”运算符(~) 例如: ~025=? 12.1.5 左移运算符() 左移运算符: 是用来将一个数的各二进制位全部左移若干位,右补0。 例如: a = 15; a = a2; //将a的二进制数左移2位 说明: 高位左移后溢出,舍弃。 左移一位,相当于该数乘以2。左移n位,相当于该数乘以2n。 只适用于该数左移时被溢出舍弃的高位中不包含1的情况。 12.1.6 右移运算符() 右移运算符: 将一个数的二进制位右移若干位,移到右端的低位被舍弃,对无符号数,高位补0。 例如: a = 017; a = a2; 说明: 右移一位相当于除以2,右移n位相当于除以2n。 在右移时,需要注意符号位问题。 对无符号数,左边高位补0; 对于有符号数,左边补0还是1,要取决于所用的计算机系统。 Turbo C采用“算术右移”的方法:左边高位补符号位。 说明: 例: int a=0113755; a = a1; 12.1.7 位运算赋值运算符 位运算符与赋值运算符组成复合赋值运算符。 = |= ^= = = 12.1.8 不同长度的数据进行位运算 如果两个数据长度不同,进行位运算时,系统会将二者按右端对齐。 例如: long a; int b; 若b为正数,则左侧16位补满0; 若b为负数,左端应补满1; 若b为无符号整数型,则左侧补满0。 【例12.4 】取一个整数a从右端开始的4~7位 分析: 先使a右移4位:b = a 4 设置一个低4位全为1,其余全为0的数: c = ~(~04) 将上面b、c进行运算。 【例12.4 】取一个整数a从右端开始的4~7位 #include stdio.h void main() { unsigned int a, b, c, d; scanf( %o, a ); b = a4; c = ~(~04); d = b c; printf( %o,%d\n, a, a ); printf( %o,%d\n, d, d ); } 【例12.5 】循环移位。 要求将a进行右循环移位,如图所示。 将a右循环移n位,即将a中原来左面(16-n)位右移n位,原来右端n位移到最左面n位。 【例12.5 】循环移位。 分析: 将a的右端n位先放到b中的高n位: b = a(16-n); 将a右移n位,其左面高位n位补0: c = an; 将c与b进行“按位或”运算: c = c|b; 【例12.5 】循环移位。 #in
您可能关注的文档
最近下载
- T∕TRSC 005-2024 黑参 团体标准.pdf VIP
- 机械加工工艺基础知识全集!.doc VIP
- 综合养老服务中心建设项目可行性研究报告.docx
- DB23_T3335—2022_黑龙江省超低能耗公共建筑节能设计标准_黑龙江省.pdf VIP
- 2025年行政执法证考试必考题库及答案.docx
- 模块二通用型带式输送机港口输送机械与集装箱机械课件.ppt
- 井下无线电磁波短距离传输技术发展及的研究.doc VIP
- 风电工程概算编制及投资控制提纲(风电).pdf VIP
- 疾病预防秋冬预防感冒(课件)小学生主题班会通用版.pptx VIP
- 《园林植物栽培与养护(第5版)》高职全套教学课件.pptx
原创力文档


文档评论(0)