- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第17章位运算作符
异或操作符(^) 异或操作符是多元操作符,使用形式如下: 数1 ^ 数2 表达式将数1和数2进行异或运算,如果两个数一样,则值为0;如果不一样,值为1。运算如下: 1 ^ 1 = 0 1 ^ 0 = 1 0 ^ 1 = 1 0 ^ 0 = 0 【范例17-5】该例使用异或操作符实现两个数的交换 位运算操作符使用示例 位运算操作符在C语言中的使用十分灵活,通过一些巧妙地算法可以高效地实现一些实用功能。 循环移位 :循环移位是一种重要的移位方式。循环移位区别于一般移位的是,移位时没有数位的丢失。循环左移时,用从左边移出的位填充字的右端;而循环右移时,用从右边移出的位填充字的左侧。 使用子网掩码 :子网掩码是一个32位地址,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在外部网上。 1.【考题】不开辟用于交换数据的临时空间,如何完成字符串的逆序。 【解析】该问题的解决可以通过位的异或操作实现。将字符串的第一个字符和最后一个字符进行位异或操作,将第二个字符和倒数第二个字符进行异或操作,依次类推,可以写出如下的函数来解决。 void change(char *str) { ?for(int i=0,j=strlen(str)-1; ij; i++, j–){ ??str[i] ^= str[j] ^= str[i] ^= str[j]; ?} } 1-* 融智技术学院 第17章 位运算操作符 杨章伟 e-mail:yang505412@163.com 课程内容安排 位运算概述 位运算操作符 位运算操作符使用示例 小结 习题 位运算概述 C语言提供了位运算操作符,使程序可以直接对内存进行操作。C语言的这个特性大大提高了C程序的执行能力,使C程序也能像汇编语言一样用来编写系统程序。例如,使用位运算操作符可以将一个存储单位中的各个二进制位右移或左移,也可以将一个存储单位中的所有二进制位取反。位运算操作符的存在使C语言与其他高级语言相比,具有很大的优越性。 位运算是指对数据的二进制位进行处理的运算。位运算与数据在内存中的存储方式息息相关。 位运算操作符 C语言共提供了6个位运算操作符,包括取反操作符(~)、位或操作符(|)、位与操作符()、异或操作符(^)和位移操作符(和)。每一个操作符都有各自独特的作用。 取反操作符(~) 取反操作符是一个一元操作符,其使用形式为:图17-4 ~15的计算过程 ~操作数; 该操作数可以为常量,也可以为变量。取反操作符可以将数按位取反,即将0变为1,将1变为0。例如,~15是对15在内存中的存储形式按位取反 。 【范例17-1】该例输出一个整数的补码形式 位或操作符(|) 位或操作符是一个二元操作符,形式如下: 数1 | 数2 同样,这两个数可以是常量,也可以是变量。位或操作符将两个操作数逐位进行位或运算。两个位值进行位或运算的规则是:只要有一个数值为1,位或的结果便为1;如果都为0,位或的结果为0。位或运算结果如下: 1 | 1 = 1 1 | 0 = 1 0 | 1 = 1 0 | 0 = 0 【范例17-2】打印整数的二进制形式并演示位或运算的功能。 位与操作符() 位与操作符也是一个二元操作符,形式如下: 数1 数2 这两个数可以是常量,也可以是变量。位与操作符将两个操作数逐位进行位与运算。位与运算的规则是:只要有一个数值为0,位与的结果便为0;如果都为1,位与的结果为1。位与运算结果如下: 1 1 = 1 1 0 = 0 0 1 = 0 0 0 = 0 【范例17-3】使用位与操作符输出整数的二进制形式 小结 本章讨论了位运算操作符的意义和用法,首先,介绍了位运算的基础知识,包括字节和位的概念、补码的概念及其与原码间转换的方式。其次,讨论了各种位运算操作符的运算规则和特殊作用,并以大量程序来演示了位操作符的广泛使用。使用位运算操作符编程时,需要注意以下几点: 位或操作符可以实现二进制指定数位置1。 位与操作符可用于将数值清零、获取二进制中指定位置的值。 与0异或,不改变数值。与1异或,会取其相反值。一个数与本身异或得到0。 将数值左移1位,即等于将该数值乘以2。将数值左移n位,即等于将该数值乘以2的n次方。左移的效率比乘法效率高。 数值右移1位,就相当于除以2。右移n位,就相当于除以2的n次方。使用右移来实现除法可以提高程序效率。 常见面试题 2.【考题】写出下面程序的输出结果。 #include stdio.h int main(void) { unsigned short A = 10; printf(~A = %u\n, ~A); char c=128; printf(c=%d\n
文档评论(0)