- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
9.1 位运算与位运算符 在计算机中一个字节由8个二进制位(D0-D7)组成,一个二进制位可以有0和1两种状态,如下图所示。 C语言提供的位运算符 除按位取反“~”运算符外,其余的都是二目运算符,即有两个操作数。在C语言中,位运算符所操作的对象必须是整型数(长整型、整型和短整型)或字符,不能对实数执行位运算。 9.1.1 按位“与”运算 使用“&”作为按位“与”运算的运算符。它对参加运算的两个操作数按对应位进行“与”运算。二进制位“与”运算的规则如右表所示。 只有两个相应二进制位都是1,则该位的运算结果是1;否则就为0。 例如,设int a=1228, b=596,计算a&b的值。 分析:假设一个int型数据占用2个字节(用16位表示,以下同)。int类型是有符号的整数类型,故实际存放数据时使用的是补码。这里1228和596都是正整数,所以其补码就等于原码。 0000010011001100 (1228) & 0000001001010100 (596) ---------------------------------------------------------------- 0000000001000100 (68) 按位“与”运算有以下用途: 1. 将某些位置0。如要将奇数位二进制位置0,其它位保持不变,则可以: XXXXXXXXXXXXXXXX (X是0或1) & 1010101010101010 (奇数位二进制位置0) -------------------------------- X0X0X0X0X0X0X0X0 (奇数位二进制位置0,其它位不变) 2. 取指定位。如要取一个整数m的高8位和低8位,则: 取高8位 取低8位 XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX & 1111111100000000 0000000011111111 --------------------- ------------------ XXXXXXX (得高8位)XXXXXXX (得低8位) 例9-1 编写一个函数,实现将一数字字符串(如“27896”)转化为一个对应的整数。 1) 字符串中的每个数字在内存中存放的是该字符的ASCⅡ,最后以“\0”结束。 2) 从内存数据中可以看出,只要将每个字节的高4位置0并保留其低4位,就可取出相应的数字,如第1个字节高4位置0低4位不变的话就得这就是数字2。 3) 先置结果num=0,从字符串的起始地址开始依次循环取出每个数字字符,对其进行第2步所示的位运算,得到对应的数字x,然后执行num = num*10+x运算,如此到字符串结束时,num中就是需要的结果值。 例9-1 源程序 long strtoint(char numstr[]) /* 字符串转换成数字 */ { long num=0; /* 结果值初始化为0 */ int i; /* 定义循环变量 */ for (i=0; numstr[i]!=0; i++) /* 循环,直到字符串结束 */ if (numstr[i]=0 numstr[i]=9) /* 只处理数字 */ num = num * 10 + (numstr[i] 0x0f ); /* 保留低4位 */ return num; /* 返回结果 */ } /* 主函数 */ void main( ) { char numstr[16]; long number; printf(\nEnter a Number String:); scanf(%s, numstr); /* 输入一个数字字符串 */ number = strtoint( numstr ); /* 将数字字符串转换成数字 */ printf(\nResult is:%ld, number); /* 输出转换后的数字 */ } 9.1.2 按位“或”运算 C语言中使用“|”作为按位“或”运算的运算符。它对参加运算的两个操作数按对应位进行“或”运算。 从右表看到,只要两个相应二进制位中有一个是1,则该位的结果是1;否则就为0 。 例9-2 编写一个函数,实现将字符串中的所有大写字母转化为小写字母 。 1) 从字符的ASCⅡ表中可以发现,大写字母与对应的小写字母的ASCⅡ值相差0x20,因此大写字母转化为对应的小写字母只需要将其第5位(D5)设置为1即可,如:大写字母B
您可能关注的文档
- C#桌面系统开发案例教程 李建青 第九章新.ppt
- C#桌面系统开发案例教程 李建青 第七章新.ppt
- C#桌面系统开发案例教程 李建青 第十一章新.ppt
- C#桌面系统开发案例教程 李建青 第十章新.ppt
- C#桌面系统开发案例教程 李建青 第四章新.ppt
- C++ Builder 6程序设计教程 陆卫忠 刘文亮 等 第一章概述新.ppt
- C++程序设计 张桦 第1章 开始学习C++新.ppt
- C++程序设计 张桦 第2章 数据类型与表达式新.ppt
- C++程序设计 张桦 第4章 程序流程控制新.ppt
- C++程序设计 张桦 第5章 函数新.ppt
- C程序设计实例教程 金林樵 第10章 文件新.ppt
- C语言程序设计 何丽 余平 C语言程序设计第2章新.ppt
- C语言程序设计 何丽 余平 C语言程序设计第4章新.ppt
- C语言程序设计 何丽 余平 C语言程序设计第5章新.ppt
- C语言程序设计 何丽 余平 C语言程序设计第6章新.ppt
- C语言程序设计 何丽 余平 C语言程序设计第7章新.ppt
- C语言程序设计 何丽 余平 C语言程序设计第8章新.ppt
- C语言程序设计 何丽 余平 C语言程序设计附录新.ppt
- C语言程序设计 何丽 余平 C语言程序设计文前第1章新.ppt
- C语言程序设计 任文 孔庆彦 (第1章--第6章) 第1章新.ppt
文档评论(0)