[IT认证]计算机C语言 第12章_位运算.pptVIP

  1. 1、本文档共42页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[IT认证]计算机C语言 第12章_位运算

第十二章 本章要点 主要内容 位运算符和位运算 位运算举例 位段 概念 位运算是指按二进制位进行的运算。因为在系统软件中,常要处理二进制位的问题。 例如:将一个存储单元中的各二进制位左移或右移一位,两个数按位相加等。 C语言提供位运算的功能,与其他高级语言(如PASCAL)相比,具有很大的优越性。 12.1 位运算 位运算的运算对象是二进制的位 位运算速度快,效率高,节省存储空间 只能对整型数据(包括字符型)进行位运算 负数以补码形式参与运算 注意与逻辑运算区别 位运算符 (Bitwise Operators) 按位与 (Bitwise AND) 运算规则 0 0 = 0; 0 1 = 0; 1 0 = 0; 1 1 = 1; 用法 按位清零 保留某些指定位 按位与的用途 (1) 清零。 若想对一个存储单元清零,即使其全部二进制位为0,只要找一个二进制数,其中各个位符合以下条件: 原来的数中为1的位,新数中相应位为0。然后使二者进行&运算,即可达到清零目的。  按位或 (Bitwise Inclusive OR) 运算规则 0 | 0 = 0; 0 | 1 = 1; 1 | 0 = 1; 1 | 1 = 1; 用法 按位置一 按位异或 (Bitwise Exclusive OR, XOR) 运算规则 0 ^ 0 = 0; 0 ^ 1 = 1; 1 ^ 0 = 1; 1 ^ 1 = 0; 说明 相“异”则为1,相“同”则为0 相当于按位且无进位的加法 按位取反 (Ones Complement) 运算规则 ~ 0 = 1; ~ 1 = 0; 用法 所有位翻转 获得适用于不同系统的位运算模板 按位取反举例 运算举例 ~ 1010,1101 (0xAD) 0101,0010 (0x52) 位运算模板 对一个int类型的整数最后四位清零 16位整数: a 0xFFF0 32位整数: a 0xFFFFFFF0 可以使用: a ~(int)0xF 左移 (Left Shift) 运算规则 i n 把i各位全部向左移动n位 最左端的n位被移出丢弃 最右端的n位用0补齐 左移举例 运算举例 1010,1101 3 (101)0110,1000 右移 (Right Shift) 运算规则 i n 把i各位全部向右移动n位 最右端的n位被移出丢弃 最左端的n位用0补齐(逻辑右移) 或最左端的n位用符号位补齐(算术右移) 右移举例 运算举例 0101,1101 3 0000,1011(101) 用法 右移n位相当于除以2n,并舍去小数部分 运算速度比真正的除法和幂运算快得多 逻辑右移和算术右移:取决于计算机系统 不同长度数据位运算规则 两个操作数右端对齐 短的数据左端用符号位补齐 正数或无符号数左端用0补满 负数左端用1补满 两个操作数长度相等后再运算 12.2 位运算举例 程序如下: #include stdio.h void main() { unsigned a,b,c,d; scanf(“%o”,a); b=a4; c=~(~04); d=bc; printf(“%o,%d\n%o,%d\n”,a,a,d,d);} 12.3 位段 位段的概念 C语言允许在一个结构体中以位为单位来 指定其成员所占内存长度,这种以位为单位的 成员称为“位段”或称“位域” ( bit field) 。 利用位段能够用较少的位数存储数据。 位段的定义 位段的定义其形式为: struct 位段结构名 { 位段列表 }; 其中位段列表的形式为: 类型说明符 位段名:位段长度 位段的引用 位段的使用位段的使用和结构成员的使用相同,其一般形式为: 位段变量名·位段名 位域允许用各种格式输出。 main(){ struct bs { unsigned a:1; unsigned b:3; unsigned c:4; } bit,*pbit; bit.a=1; bit.b=7; bit.c=15; printf(%d,%d,%d\n,bit.a,bit.b,bit.c); pbit=bit; pbit-a=0; pbit-b=3; pbit-c|=1; printf(%d,%d,%d\n,pbit-a,pbit-b,pbit-c); } 思考 编写函数,取出一个16位二进制数的某几位 编写函数,取出一个16位二进制数的奇数位 ① 将a的右端n位先放到b中的高n位中,实现语句:b=a<<(16-n); ② 将a右移n位,其左面高位n位

文档评论(0)

jiupshaieuk12 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档